0

我已按照教程对 ASP.NET/C# 4.0 Web 应用程序实施 LDAP (Active Directory) 身份验证。我的身份验证工作正常,并且能够以我们域的用户身份登录。但是,本教程不涉及下一步,我需要在其中保留一个特定于会话的对象和一些可变数据。

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

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

4

3 回答 3

1

您几乎可以在 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

于 2012-12-11T04:07:29.893 回答
1

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

于 2012-12-11T04:08:40.830 回答
1

我认为您应该看看 asp.net 的表单身份验证。

网络配置:

<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);

我也会给你一个关于使用 Session 的建议。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(); }
    }
}

This way you won't sprinkle your code with calls to session all over the place, with the increasing risk of spelling a key wrong or getting values out of sync.

于 2012-12-11T07:36:42.047 回答