Session Start Global.asax C#ASP.NET

时间:2018-05-04 04:04:49

标签: c# asp.net webforms

我有以下代码:

protected void Session_Start(object sender, EventArgs e)
    {
        WindowsPrincipal p = Thread.CurrentPrincipal as WindowsPrincipal;
        string sUserAccount = HttpContext.Current.User.Identity.Name.ToString();

        HttpContext.Current.Session["WinAccount"] = sUserAccount;
    }

代码是获取Windows用户名。从session_start开始,我想创建一个名为WinAccount的会话。但是,当我尝试从我的一个页面(default.aspx)调用会话时,该会话上有master page

请说,在page_load上:

string sWinAccount = Session["WinAccount"].ToString();
Label1.Text = sWinAccount.ToString();

web.config看起来像:

<authentication mode="Windows"/>
<identity impersonate="false"/>
<authorization>
  <deny users="?"/>
</authorization>

此外,项目的属性已启用Windows身份验证模式。

当我跑步时,它会空白。 请指教。

谢谢。

3 个答案:

答案 0 :(得分:3)

  1. 验证应用程序是否使用Windows身份验证(请检查web.config)。如果您要提供自定义或表单身份验证,则需要在成功处理程序上设置用户详细信息,而不是会话启动;并使用CustomPrincipal而不是WindowsPrincipal。
  2. 如果启用了Windows身份验证,则用户凭据将在第一个请求(会话启动)上可用,并且您可以在代码中提到检索。在会话启动时放置调试器并验证是否正确检索它。

答案 1 :(得分:1)

string sUserAccount =System.Security.Principal.WindowsIdentity.GetCurrent().Name.Tostring();

答案 2 :(得分:0)

当新客户端首次向应用程序发出请求时,会触发Session_Start事件,而不是在用户登录时触发。因此,在您的情况下,调用Session_Start时HttpContext.Current.User.Identity.Name为空。它按预期工作。