我們正在觀察Web服務器日誌中的某些奇怪行爲,其中當前登錄的用戶的身份似乎正在與另一個用戶交換。我將在進一步解釋之前先描述我們的設置。Windows身份在用戶之間混淆
我們在2臺Windows 2008 Web服務器上運行一個asp.net網站(框架的v3.5)並使用表單身份驗證。它們使用在Linux上運行Apache 2.2的單獨服務器進行負載平衡(Cent OS 5) 。負載平衡只需將Cookie附加到用戶,並將其引導至特定的服務器,以滿足每個後續請求。 [email protected]
用戶ID - - 1111
好康 - 第1頁
我們的日誌是這樣的(細節混淆)
第一個日誌條目
用戶名通知中偶爾模式
IP-ip1
時間 - 2010-06-29 12:56:20.750
的SessionID - h3uyz2fsdfegugjy452sdz0far
其次日誌條目
用戶名 - [email protected]
用戶ID - 2222
好康 - 第2頁
IP-ip2
時間 - 2010-06-29 12:57:16.133
的SessionID - 21ipjsdfsdfieqqwyfdokgqsb55
我們正在使用窗體身份驗證使用標準的asp.net表單驗證框架(標準登錄控制,我們實現了一個自定義的成員提供)。
UserName是使用「HttpContext.Current.User.Identity.Name」檢索的Windows標識UserId是會話中設置的數據庫標識。使用「HttpContext.Current.Session.SessionID」獲取sessionId
正如你所看到的,對於2個不同的用戶來說,在不同的IP地址和不同的會話ID下,相同的Windows身份是相同的,點擊網站大致相同時間。我們檢查了IP,它們來自完全不同的地點。錯誤的Windows身份似乎正在被記錄下來。 UserId 2222應該記錄不同的用戶名。
由於它偶爾會發生,代碼是標準的,並且一段時間沒有發生實質性變化,我們不會「認爲」它是編碼錯誤。我們假設負載均衡器出現問題或Web服務器出現問題。我以前從來沒有聽說過asp.net的這種問題。
最近我們確實將Windows 2003上的IIS6和Cisco硬件負載平衡器的設置更改爲Windows 2008上的IIS7和Apache負載平衡的當前設置。任何想法讚賞。
Web中的表單身份驗證條目。配置是
認證模式= 「表單」
形式loginUrl = 「LoginPage.aspx」 NAME = 「ASPXFORMSAUTH」
您的服務器上是否運行了超過1個網站? – TheGeekYouNeed 2010-06-30 10:49:48
是的,有2個網站 – scottrm 2010-06-30 17:09:54
當你說你關閉了輸出緩存時,你的意思是你禁用了它,還是刪除了所有的緩存指令?我們看到了同樣的事情! – 2011-02-04 14:56:03