【问题标题】:When is HttpContext.User.Identity set?什么时候设置 HttpContext.User.Identity?
【发布时间】:2011-07-06 10:11:26
【问题描述】:

我有验证码:

var authTicket = new FormsAuthenticationTicket(/*blahblah....*/);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, 
                            FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);
var name = HttpContext.User.Identity.Name; // line 4

通过放入调试语句,我发现第 4 行的name 是空的。但下次我在此浏览器会话上进行调用时,HttpContext.User.Identity.Name 已正确设置。

那么这个值什么时候设置?

【问题讨论】:

  • 只是想知道为什么要手动创建 cookie 并将其添加到响应中,而不是仅仅调用:FormsAuthentication.SetAuthCookie()?
  • 还想知道如果要设置 Auth cookie,为什么需要从 HttpContext 获取用户名?当然,如果你要设置一个 Auth cookie - 你是说你想将此人设置为“登录” - 如果你还不知道他们的用户名,你怎么能这样做?
  • @Nick - 原因是因为这是一系列开发中的最新进展,您可以从这里跟进:stackoverflow.com/q/6586156/7850

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


【解决方案1】:

如果给定的请求包含身份验证 cookie,则将设置 HttpContext.User.Identity.Name。在您的情况下,cookie 刚刚被添加到浏览器获取的响应中。如果存在,浏览器将在以下请求中添加 cookie。

【讨论】:

  • 现在这就是我的想法。除了我遇到的行为与您所描述的不符。见这里:stackoverflow.com/q/6586156/7850
  • 哇,伙计。这似乎是您在那里遇到的一个真正令人费解的问题,但正如我从对话中收集的那样,cookie 在登录后与响应一起发送,也在空中客户端中。我会尝试看看是否可以帮助您解决最初的问题。
  • 是forms认证和windows认证都设置的认证cookie,还是只是forms认证?
【解决方案2】:

从您的代码看来,您要么必须调用:

FormsAuthentication.Authenticate(name, password)

或者,如果使用会员资格,则如下:

Membership.ValidateUser(name, password)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2011-05-15
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多