用户ID的变量,在整个页面创建过程中可以访问。(而不是会话)

时间:2011-11-24 21:12:38

标签: c# asp.net

我目前正在使用会话来保存我的网络应用程序中的用户ID。我读了很多关于会话是邪恶的,所以我的计划是找到另一种解决方案。

所以我的下一步是使用加密的cookie。 类似的东西:

userInformation: ENCRYPT(UserID,subdomain,someComputerUniqueValue,hashvalueOftheString)

每个用户都有自己的子域,因此UserID和Subdomain必须匹配。 但。现在几乎每个页面都调用会话值来获取userID。 我想把它改成某种变量,但是什么样的变量?! 我现在在httpmodule中设置会话值。在

public void Application_PreBeginRequest

是否可以在application_prebeginRequest中创建变量,并在创建页面期间在其他位置读取它。例如在主页中,och是contentpage。或该特定页面使用的类。 当页面被创建并发送到客户端时,变量应该死掉。

我在寻找什么样的变量?它是全局变量吗?如果不是,什么是全局变量?

感谢阅读! Mattias R。

编辑:

此Cookie不用于身份验证。我想保存连接到子域的用户的ID,所以我不必每次访问一个页面时都运行“来自帐户的SELECT ID,其中subdomain ='somethin'”查询。

3 个答案:

答案 0 :(得分:1)

用户通过身份验证后,为什么不使用FormsAuthentication.SetAuthCookie登录?

然后,您可以使用HttpContext.Current.User.Identity.Name检索当前登录的用户。

答案 1 :(得分:1)

您可以在HttpContext.Current.Items中存储您需要的内容。放在其中的项目仅在当前Web请求期间生效,并且将在您的Web应用程序中全局可用。

// Global.asax
void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Items["hello"] = DateTime.Now;
}
// Default.aspx
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = HttpContext.Current.Items["hello"].ToString();
    }
}

顺便说一句,在Application_BeginRequest事件中,Session对象不可用。

有关HttpContext.Current.Items的更多信息,请查看http://www.4guysfromrolla.com/articles/060904-1.aspx

答案 2 :(得分:0)

会话不是“邪恶的”会话存储在服务器上,对于少量数据,例如你的建议,它可以很好地扩展。