通过web会话维护用户对象



我遵循了一个教程来实现ASP的LDAP(Active Directory)身份验证。NET/C#4.0 Web应用程序。我已经进行了身份验证,并且能够以我们域的用户身份登录。然而,本教程中没有介绍下一步,我需要保留一个具有一些可变数据的会话特定对象。

现在LDAP身份验证已经工作了,我正在创建一个类来包装会话。但是,我不确定如何创建这个会话,使它在所有用户的请求中保持活动状态。在Globals.asax中,我按照教程中的要求使用了Application_AuthenticateRequest。我假设我需要在这里做一些事情,但由于我是C#的新手(更熟悉Delphi),我不知道我需要在哪里真正声明/创建这个用户类实例。

这个类包含一些我想在这个用户的会话中保持可访问性的东西,当然假设服务器在这段时间内一直在运行。例如,包含产品数据的数据集,用户可以在不同的请求中请求该数据集的各个部分。因此,它必须在整个用户会话中保持可访问性,而不仅仅是一个HTTP请求。

我认为您应该了解asp.net的Forms身份验证。

Web.config:

<authentication mode="Forms">
<forms name=".ASPXFORMSAUTH" loginUrl="/Login.aspx" timeout="120" />
</authentication>
<authorization>
<deny users="?" />
</authorization>

在您使用ldap成功登录访问者后,您可以在web应用程序中登录该访问者,只需很少的代码:

PrincipalInfo.CurrentPrincipal = PrincipalInfo.CreatePrincipal(userName);
FormsAuthentication.SetAuthCookie(userName, true);

我也会给你一个关于使用会话的建议。Jeffery为您提供了一个如何使用Session对象的简单示例。但不要在Session中存储多个单个值;而是创建一个类,如"VisitorInformation",其中包含您需要的所有属性。然后创建一个静态管理器,设置并获取访问者信息。

Visitor visitor = VisitorManager.CurrentVisitor;
string name = visitor.Name;
int age = visitor.Age;


private const visitorSessionKey = "visitorSessionkey";
public static Visitor CurrentVisitor
{
{ 
get { return (Visitor)Session[visitorSessionKey] ?? new Visitor(); }
}
}

这样,您就不会在代码中到处调用会话,从而增加拼写错误或值不同步的风险。

您几乎可以在asp.net中的任何地方读取或写入Session。

示例:

using System.Web;
...
Session["UserAge"] = 28;
var userAge = (int)Session["UserAge"];

会话确实有超时期,可以在web.config中进行配置。只要向浏览器发出请求,会话信息就应该保持不变。

有关详细信息,请参阅MSDN:http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.aspx

有一个名为Session的内置对象,允许您从Session中添加和检索内容。它们是通过ASP维护的会话cookie自动查找的。NET。

最新更新