通过Web会话维护用户对象

时间:2012-12-11 04:01:22

标签: c# asp.net .net session

我已按照tutorial对ASP.NET / C#4.0 Web应用程序实施LDAP(Active Directory)身份验证。我有身份验证工作,并能够在我们的域的用户下登录。然而,本教程不涉及下一步,我需要使用一些可变数据保存特定于会话的对象。

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我认为你应该看看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);

我还会给你一个关于使用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(); }
    }
}

通过这种方式,您不会在整个地方调用会话,而且会增加拼写错误或使值不同步的风险。