如何检索当前登录的用户

时间:2014-08-08 08:15:50

标签: asp.net-mvc vb.net session

我已经编写了自己的基于会话的身份验证。在Global.asax中,我添加了这个功能,它接受环境用户名并检查它是否存在于数据库中:

Protected Sub Session_Start(sender As Object, e As EventArgs)

    Dim userData As UserLogin = _
        New UserLogin(Convert.ToString(Environment.UserName))

    If userData.IsValid Then
        Authentication.SaveUserToSession(userData)
    End If
End Sub

这就是我在身份验证类中将userstate保存到会话的方式:

Public Shared Sub SaveUserToSession(user As UserLogin)

    HttpContext.Current.Session("Username") = user.Username
    HttpContext.Current.Session("isValid") = user.IsValid
    HttpContext.Current.Session("isAdmin") = user.IsAdmin
    HttpContext.Current.Session("ID") = user.Id

End Sub

当我在视图中显示时:

<ul >
    <li>Welcome @HttpContext.Current.Session("Username")</li>
</ul>

每个人都看到相同的用户名。为什么会这样?

3 个答案:

答案 0 :(得分:2)

System.Environment.UserName返回运行托管您网站的应用程序池的标识。

因此,在您的情况下,这始终是您的帐户。

因此,根据您实施的安全方法,您必须使用适当的方法来检索当前登录的用户名。

答案 1 :(得分:1)

根据MSDN文档Environment.UserName“获取当前登录到Windows操作系统的人员的用户名。”。

因此,让您的用户登录您的网站是没有用的,因为您始终是登录操作系统的用户,所以每个人都会获得您的数据。

答案 2 :(得分:1)

如果要创建对登录到Windows域的用户进行身份验证的Intranet网站,可以使用带有Windows身份验证的ASP.NET身份。您必须将身份验证更改为 Windows身份验证

Windows Authentication

通常,当您访问Environment.UserName时,获取拥有执行进程的用户的名称,并且在ASP.NET中,此用户是服务帐户(而不是从Web浏览器发送请求的用户)。但是,当您使用Windows身份验证时,此行为会更改,您现在可以使用Environment.UserName来获取远程用户的名称。显然,这仅适用于具有Windows域的Intranet。

实际上,您不应在ASP.NET应用程序中使用Environment.UserName,因为它会根据所使用的身份验证更改行为。相反,您可以检查基于最新版本的框架的ASP.NET应用程序中的控制器和视图中可用的User属性,它将为您提供有关远程用户的信息,如果他或她已登录

相关问题