使用 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
答案 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),然后检查它的错误请求值