我遵循了一个教程来实现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。