我有一個ASP.NET 2.0網站,用於存儲會話中的用戶ID以表明他們已登錄。在某些情況下,用戶似乎不會保持登錄狀態。去過的監測提琴手交通,以及一些細節,我發現:ASP.net會話cookie丟失或刪除
- 問題是運行IE7運行時,IE7和項目經理的筆記本電腦時,可重複的100%我的一箇舊的筆記本電腦。在我運行IE7的筆記本電腦上,或者在運行FF時,這些筆記本電腦中都沒有發生這個問題。
- 該問題僅在生產中發生 - 不在開發,內部分段或客戶端分段中。生產是唯一的負載平衡環境,但上面提到的可重複性使得我對負載平衡提出質疑。
- 當設置Session(「ID」)= 1的頁面向客戶端發送一個響應時,我可以在所有情況下看到一個「Set-Cookie」頭,它創建了ASP.Net_Session_Id cookie(並且它是HttpOnly )。
- 對服務器的後續請求將在未出現問題的計算機上的標頭中發送該cookie,但不在計算機上,因此cookie被刪除或「Set-Cookie」標頭被忽略。
- 登錄工作方式如下:www.DomainX.com上的一個頁面有一個iframe。該iframe的來源是login.DomainY.com上的一個頁面。從login.DomainY.com提供的各種頁面可讓用戶完成登錄/註冊過程。 login.DomainY.com的最後一步是重定向到www.DomainX.com上的一個頁面,包括查詢字符串中的用戶ID。 www.DomainX.com上的這個頁面通常在會話中存儲ID,然後運行一些JS將頂級文檔重定向到新頁面,從而使用戶離開iframe。這是一個已經工作了幾年的流程,有幾個DomainX.com的價值。這裏可能有所不同的是,在這種情況下,JS只是簡單地銷燬iframe和一些包含div的東西。
- 我在Google Analytics Cookie中發現問題的場景和不出現的場景之間的另一個區別。當login.DomainY.com/FinalStep.aspx在iframe中重定向到www.DomainX.com/SaveTheID.aspx時有所不同。如果問題沒有發生,請求SaveTheID.aspx包含各種Google Analytics Cookie(__utma,__utmz等)。當問題發生時,這個請求不包括所有GA cookies(它缺少__utma,__utmz和__utmb)。
- 生產是login.DomainY.com在SSL下運行的唯一環境,所以我認爲這可能是相關的。但是我們暫時將login.DomainY.com的登臺副本設置爲使用SSL,並且沒有任何效果。
任何想法可能導致這種情況?
編輯:生產環境具有www.DomainX.com和DomainX.com的域。還有另一個已知的問題,即沒有爲這兩個域設置Cookie。這可能與此有關,但在修復版本發佈之前我無法進行測試。
有你一起看着提琴手網絡流量 - http://www.fiddler2.com/ - 這是一個偉大的工具查看服務器和瀏覽器之間發送的流量,包括cookie等,並且可以配置爲解密HTTPS流量? – 2010-02-05 16:45:30
是的,我一直在這樣做; Fiddler是我現在知道的主要信息來源。謝謝,不過。 – Joel 2010-02-05 17:07:45