2014-01-18 45 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

相關問題