在ASP.NET中如何设置会话的当前用户标识?

时间:2013-03-06 18:32:19

标签: asp.net asp.net-mvc asp.net-mvc-4

我有一个简单的页面,我有一个登录按钮。我只是想以编程方式设置用户身份,以便当我重新导航到此页面或任何其他我可以获得当前用户身份。对此有特殊考虑吗?

2 个答案:

答案 0 :(得分:14)

简答:

//
// Swapped FormsIdentity principal with our own custom IPrincipal
//
HttpContext.Current.User = yourPrincipalFromSomewhere;

//see
//http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx

//
// Sync Context Principal with Thread Principal
//
System.Threading.Thread.CurrentPrincipal = System.Web.HttpContext.Current.User;

所以在登录时,我的团队会将IPrincipal(我们的自定义)放在这里:

HttpContext.Current.Cache.Insert

然后在

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
}

我们会从:

中抓住它
HttpContext.Current.Cache

然后将其重新连接到:

// Swapped FormsIdentity principal with our own IPrincipal
                            //
                            HttpContext.Current.User = cachedPrincipal;

                            //see
                            //http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx

                            //
                            // Sync Context Principal with Thread Principal
                            //
                            System.Threading.Thread.CurrentPrincipal = System.Web.HttpContext.Current.User;

我是否说“完全像我的团队一样”?不必要。 但我告诉你我们遇到的两个地方附上它。

和hanselman链接,它显示了一些关于它的信息。

http://www.hanselman.com/blog/SystemThreadingThreadCurrentPrincipalVsSystemWebHttpContextCurrentUserOrWhyFormsAuthenticationCanBeSubtle.aspx

答案 1 :(得分:2)

保存userId:

Session["UserId"] = loggedInUserId;

检索userId

int loggedInUserId  = (int)Session["UserId"];

您担心什么样的特殊注意事项?更具体。