我有一個有趣的問題讓我完全陷入困境。IE8沒有正確地跨域應用cookie - 僅在一臺機器上
我有一段生產代碼,它讀取由另一個部門管理的機器設置的IBM LTPA令牌cookie,驗證它並使用它登錄到我的小組管理的系統中(通過設置一些特殊的cookie )。這種單一登錄流程對最終用戶來說是完全透明的,並且在所有瀏覽器中的生產工作已經有好幾年了。
最近,我注意到它在IE8開發機器上無法正常工作。我最近從Vista升級到Windows 7.我不確定在升級之前或升級之後這是不是在我的機器上工作,但是,因爲它已經工作了很長時間,我沒有理由對其進行正常測試。在同一臺機器上的FireFox 3.5和Chrome 4 dev都能按預期工作。在這臺機器上的XP SP3虛擬IE6工作正常。家中多臺機器上的IE8都能正常工作(包括Windows Server 2008和Windows 7)。
出於診斷目的,我從我的開發IE8(WinInet緩存)中清除所有緩存的數據以開始一個乾淨的石板。我啓動了Fiddler來追蹤過程並確定哪些不起作用。我發現的東西很有趣,我無法解釋它。
在intial站點上登錄後 - 讓我們稱之爲ltpa.domain.com,會話cookie從服務器按預期使用Set-Cookie頭推下。我驗證該域已正確設置爲.domain.com,並且路徑爲/。在登錄後,所有後續的瀏覽器請求都會按照預期將所有的cookie備份到每個請求的服務器上。實際上,這是一個門戶網站,並且還有一些額外的內容,比如說,也可以檢索到portal.domain.com;所有的cookies都會正確地傳遞給該服務器。
現在到了有趣的位置 - 當我向myserver.domain.com發出請求時 - 由ltpa.domain.com設置的域級cookie不會被推送到myserver.domain.com,即使它們應該。單點登錄過程自動重定向回到ltpa.domain.com,如果cookies缺失(並將cookie推送到ltpa登錄過程用來重定向的客戶端) - 由myserver設置的域級cookie不在推回到ltpa.domain.com。
同樣,這只有發生在我知道的開發機器上的IE8的這一個實例。這個過程每天使用數千次,擁有相當大的用戶羣,而且我們沒有收到任何其他用戶的投訴 - 所以沒有跡象表明這是IE8或類似的系統問題。
行爲在我看來,它將myserver.domain.com和ltpa.domain.com視爲單獨的域,即使它們不是。
有兩點可能值得一提 - 但可能是紅鯡魚,因爲它一直是這種方式,並且從來沒有引起過問題。
DNS在這裏有點時髦。 LTPA.domain.com解析爲外部IP。但是,myserver.domain.com解析爲內部IP。對該IP進行反向查找會得到內部DNS名稱 - 比如myserver.internal.domain.com。我推測,也許IE8正在進行某種反向查找以防止基於DNS的攻擊 - 所以我修改了我的HOSTS文件並將myserver.domain.com指向了外部IP以用於測試目的。我在Fiddler中驗證了請求會發送到外部IP--但它與cookies沒有區別。他們仍然沒有通過。
此前,myserver.domain.com位於IE WinInet安全配置頁面中的'可信站點'下。我刪除了它和另一個在那裏的網站。我們稱這臺機器爲my2.domain.com;這臺機器巧合(或可能不是?)沒有被傳遞給由ltpa.domain.com設置的域名cookie。在這種情況下,我不需要通過cookie,但我仍然測試過它,看看這個問題是否影響到其他機器。在IE狀態欄中,ltpa.domain.com,portal.domain.com和myserver.domain.com都顯示在「Internet」區域下。奇怪的是my2.domain.com仍然在狀態欄中顯示'可信站點',即使它沒有在對話框中列出?是的,我在進行更改後重新啓動。
其他值得注意的地方。
我所知道的與IE和非.com域名,引用cookie值,以及其他餅乾異常等問題 - 在這裏計算器和其他地方提到的Interwebs。這些都不適用。我已閱讀Eric Law的IEInternals關於cookie內部的文章 - http://blogs.msdn.com/ieinternals/archive/2009/08/20/WinINET-IE-Cookie-Internals-FAQ.aspx
在IE中沒有啓用任何時髦的插件。只需Flash,Silverlight,Live ID登錄助手和Fiddler2。
沒有用於過濾掉特定於我的域的內容的InPrivate規則。
由於我在筆記本電腦上,我嘗試從家庭網絡(重新啓動後)的IE8來排除DNS問題。我在家中遇到同樣的行爲,所以時髦的DNS並不是一個問題,據我所知。
我已經翻遍了所有的IE設置,多次,認爲我可能錯過了一個不起眼的cookie設置。隱私設置在「中」,沒有特殊處理的網站。
使用開發工具,我確保'始終刷新服務器'未被選中。
我不認爲這是我可以向微軟報告的任何事情,因爲我無法在其他地方重現問題。
所以在這一點上,我很茫然。缺少IE8中某種我不知道的診斷模式,或者沒有編碼來進行調試......我已經用完了好的想法。
我想我已經遇到了一個錯誤,一些註冊表設置或類似已經調整,或者什麼東西,某處已經變得腐敗。
任何想法?
「路徑是\」?真的,一個反斜槓?應該是前鋒,儘管我不知道這是否會有所不同。 +1雖然詳細:-) – bobince 2009-11-11 16:20:17
哎呀 - 錯字。糾正。 – 2009-11-11 16:21:21
交叉發佈在MSDN論壇 - http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/b2eac7c9-d51d-485b-9f28-89ce0f99af1b – 2009-11-11 18:47:47