HttpContext.Current.User.Identity.Name如何知道存在哪些用户名?

Srb*_*711 34 c# asp.net httpcontext

这不一定是一个问题,我只是好奇它是如何工作的.我有一个方法:

public static bool UserIsAuthenticated()
{
    bool isAuthed = false;
    try
    {
        if (HttpContext.Current.User.Identity.Name != null)
        {
            if (HttpContext.Current.User.Identity.Name.Length != 0)
            {
                FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;
                isAuthed = true;
                string MyUserData = ticket.UserData;
            }
        }
    }
    catch { } // not authed
    return isAuthed;
}
Run Code Online (Sandbox Code Playgroud)

HttpContext.Current.User.Identity.Name返回null如果用户不存在,但它是如何知道哪些用户名存在或不存在?

Anw*_*Haq 53

用于Windows身份验证

选择你的项目.

按F4

禁用"匿名身份验证"并启用"Windows身份验证"

在此输入图像描述

  • 这似乎没有解决“HttpContext 如何知道存在哪些用户名?”的问题。 (3认同)

Anu*_*ain 25

HttpContext.Current.User.Identity.Name返回null

这取决于您的web.config文件中的身份验证模式是设置为Forms还是Windows.

例如,如果我像这样编写身份验证:

<authentication mode="Forms"/>
Run Code Online (Sandbox Code Playgroud)

然后因为身份验证模式="表单",我将为用户名获取null.但是,如果我将身份验证模式更改为Windows,如下所示:

<authentication mode="Windows"/>
Run Code Online (Sandbox Code Playgroud)

我可以再次运行应用程序并检查用户名,我将成功获取用户名.

有关更多信息,请参见ASP.NET中的System.Web.HttpContext.Current.User.Identity.Name与System.Environment.UserName.

  • 谢谢你的答案,但我的方法有问题,我的问题是如何?我不明白HttpContext.Current.User.Identity.Name是如何设置的? (5认同)

小智 5

假设一个“用户”(也就是您)必须登录的网络环境。通常这是一个用户 ID (UID) 和一个密码 (PW)。那么,你的身份是什么,或者你是谁?您是 UID,这会从您的登录会话中收集该“名称”。简单的!它也应该适用于需要您登录的 Internet 应用程序,例如 Best Buy 和其他应用程序。

当我打开需要使用的 Web 应用程序的默认页面时,这将从我的会话中提取我的 UID 或“名称”。现在,在我的实例中,我是域的一部分,所以我可以使用初始 Windows 身份验证,它需要验证我是谁,因此是代码的第二部分。至于表单身份验证,它将依赖于发送到您的工作站/计算机的票证(最有可能是 cookie)。代码如下所示:

string id = HttpContext.Current.User.Identity.Name;

// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1);
Run Code Online (Sandbox Code Playgroud)

现在它有了我的公司名称(又名 UID)并且可以在屏幕上显示它。


Bri*_*ian 5

[HttpContext.Current.User] 如何知道哪些用户名存在或不存在?

让我们看一个这种工作方式的例子。假设您正在使用表单身份验证并且“OnAuthenticate”事件触发。此事件发生在“当应用程序验证当前请求时”(参考来源)。

到目前为止,应用程序不知道您是谁。

由于您使用窗体身份验证,通过分析验证cookie(通常它首先检查.ASPAUTH通过一个呼叫)ExtractTicketFromCookie。这个调用FormsAuthentication.Decrypt(这个方法是公开的;你可以自己调用这个!)。接下来,它调用Context.SetPrincipalNoDemand,将 cookie 转换为用户并将其填充到Context.User( Reference Source ) 中。