HttpContext.Current.User.Identity.Name返回错误的用户名

时间:2014-01-18 18:49:37

标签: asp.net httpcontext

使用 SQL成员资格提供程序进行身份验证的纯 ASP.NET 应用程序。虽然应用程序在大多数时间运行良好。我们最近看到用户抱怨说他们正在看其他用户帐户。

我很确定&再次确认我直接在代码中使用 HttpContext.Current.User.Identity.Name 来获取用户信息。因此,在重载下,我会返回不同的用户名。

有没有人遇到类似的问题?有可能吗?

应用程序运行在ASP.NET 4.0,Web窗体,无缓存,代码中没有处理任何cookie,没有嗅探cookie的Javascripts。

我看到这两个链接大致相同但没有回答。

http://bytes.com/topic/asp-net/answers/324385-serious-issue-httpcontext-current-user-identity-name

http://www.experts-exchange.com/Web_Development/Miscellaneous/Q_21105924.html

1 个答案:

答案 0 :(得分:3)

表单身份验证不应过多地与成员资格提供者相关。

FormsAuthentication将签名的用户信息保存到.ASPXAUTH cookie中。当下一个请求到达服务器时,它会解密cookie值并将其设置回HttpContext.Current.User.Identity.Name。它使用MachineKey进行加密\解密。然后它根据保存用户名的FormsAuthenticationTicket对象创建FormsIdentity对象。因此,您的userName存储在客户端上。整个过程不包括会员提供者的使用。

表单身份验证仅在您为用户登录时使用成员身份,然后基于登录用户FormsAuthentication创建具有UserName的cookie。

关于您的问题,您需要检查具有无效UserName的请求的.ASPXAUTH Cookie值。您可以尝试记录这些错误请求的cookie信息,然后您可以解密它们以从请求中获取userName信息。或者,如果您可以在本地重现它,您可以禁用表单cookie加密(protection element),然后检查它的错误请求值