2014-01-18 44 views
4

它是一个普通的ASP.NET应用程序使用SQL成员资格提供程序进行身份验证。应用程序在大多数情况下运行良好。我们最近看到用户抱怨说他们正在看到其他用户的帐户。HttpContext.Current.User.Identity.Name返回错误的用户名

我很确定&再次确认我直接使用HttpContext.Current.User.Identity.Name在代码中获取用户信息。所以在重负载下,我得到了不同的用户名。

有没有人遇到过类似的问题?有可能的原因?

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

我看到这两个链接采取大约相同,但没有答案张贴。

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

请描述你的应用程序更多的价值。您是否使用任何自定义缓存(因此可能会捕获缓存中的一个用户数据或.ASPXAUTH响应cookie并将其提供给后续访问者)?如果您在服务器上运行Windows Update,它是否显示您已完全打补丁?什么版本的ASP.NET?依此类推。 – Levi

+0

更新了答案,我将检查服务器中的更新。 – Kusek

+0

你解决了吗?如果是这样,怎么样? –

回答

3

窗体身份验证不应该与会员供应商太多了。

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

窗体身份验证使用会员只有当你登录的用户,然后根据登录的用户FormsAuthentication创建一个带有用户名的cookie。

关于您的问题,您需要检查.ASPXAUTH cookie值对谁拥有无效的用户名的请求。您可以尝试记录这些错误请求的cookie信息,然后您可以解密它们以获取来自请求的userName信息。或者,如果您可以在本地复制它,你可以禁用表单Cookie加密(protection element),然后检查它的坏请求

+0

我没有得到,它怎么会返回一个随机的人的电子邮件ID?我试图重现这个问题,但没有运气。我知道这发生在一个罕见的情况下,我看到用户的屏幕截图发送给我一个不是他们的帐户,也没有任何相关的帐户。 – Kusek

+0

它不应该是随机的。您需要检查这些请求的cookie值,也许应用程序中的某些JavaScript会覆盖\删除cookie值,然后Asp.Net仅使用空的UserName,因为它没有Cookie。 –

+0

如何检查这些请求的cookie值?是否有日志记录选项?我知道这很奇怪,但是没有其他Javascript正在处理cookie。这是一个小应用程序,我跑过去了。我确信我自己在所有地方都使用HttpContext.Current.User.Identity.Name。 – Kusek

相关问题