2009-11-11 34 views
6

我有一個有趣的問題讓我完全陷入困境。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中某種我不知道的診斷模式,或者沒有編碼來進行調試......我已經用完了好的想法。

我想我已經遇到了一個錯誤,一些註冊表設置或類似已經調整,或者什麼東西,某處已經變得腐敗。

任何想法?

+0

「路徑是\」?真的,一個反斜槓?應該是前鋒,儘管我不知道這是否會有所不同。 +1雖然詳細:-) – bobince 2009-11-11 16:20:17

+0

哎呀 - 錯字。糾正。 – 2009-11-11 16:21:21

+0

交叉發佈在MSDN論壇 - http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/b2eac7c9-d51d-485b-9f28-89ce0f99af1b – 2009-11-11 18:47:47

回答

3

我想我已經在這裏找到了問題。

這必須是IE中的錯誤。那麼,兩個實際上如果我們分裂頭髮。

儘管我很早就從IE安全對話框的可信站點站點列表中刪除了myserver.domain.com和my2.domain.com,但這兩個站點都保留在註冊表中的區域配置中!我能夠通過在註冊表中搜索我的服務器名稱和瞧,這是一個小小的偵探工作證明卓有成效。

有一個子項下 HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows \ CurrentVersion \ Internet設置\ ZoneMap \域名

domain.com的

而下domain.com呆了子項的兩個不同我已經從「可信站點」列表對話框中刪除的服務器 - 都是REG_DWORD值*設置爲2.這當然意味着將站點放入可信站點。

我能夠從「腳本專家」那裏挖掘出一篇舊文章,討論這個特定的關鍵字以及可用於更改區域的值。 http://blogs.technet.com/heyscriptingguy/archive/2005/05/02/how-can-i-add-a-site-to-internet-explorer-s-restricted-sites-zone.aspx

也許這些設置在UI中以某種方式被棄用,但仍然被讀取/使用?我不知道,但很顯然,在用戶界面中顯示的內容與實際使用的內容不匹配。

此外,正如前面的評論中所提到的,當點擊myserver.domain.com的根目錄(導致從服務器btw產生403)時,狀態欄顯示「Internet |保護模式:關閉「,這隻會增加混淆,因爲它應該讀作」受信任的站點|「保護模式:關閉'。

因此,解決辦法最終是要麼

一個 - 刪除讓一切都搬到了互聯網上區 OR 上面的b指定的雷吉·基斯 - 添加* .domain.com到受信任網站的列表,以便一切移到互聯網區域

希望你可以將這些問題與IE團隊Eric一起提交?

感謝您讓我指出正確的方向!

+0

是的,它不支持使用UI以外的任何其他方式將域直接寫入註冊表。當你這樣做時,用戶界面可能會失去同步並導致這樣的問題。 – EricLaw 2009-11-11 22:00:19

+1

我沒有使用UI以外的其他任何方法嘗試從受信任區域中刪除這些網站。我剛開始在註冊表中進行挖掘,以查看該域是否存儲在某個註冊表中,並且確實存在。 我沒有手動把它放在那裏 - 也許這是從以前的IE版本,在升級繼續殘留?這個盒子以前是Vista/IE7 ...然後是Vista/IE8 ...然後是Win7 w/IE8。當然,各種服務包之間。 – 2009-11-11 23:00:37

1

你需要非常小心「域」這個詞,因爲很多人用它來表示許多不同的東西。

http://blogs.msdn.com/ieinternals/archive/2009/09/19/Private-Domain-Names-and-Public-Suffixes-in-Internet-Explorer.aspx

從描述,聽起來很像你打在這篇文章中描述的部分「排除登錄曲奇」問題3: http://blogs.msdn.com/ieinternals/archive/2009/09/11/Troubleshooting-Stored-Login-Problems-in-IE.aspx

您需要解決的區/完整性級別問題,以解決cookie問題。

+0

只要你這麼說,我想GP和double檢查了域控制器策略。上述網站不在GPO內的「受信任區域」,所以我們在那裏很好。他們是本地添加的 - 但正如我前面所述,我將它們移除並重新啓動機器。 Myserver.domain.com在狀態欄中顯示「Internet」,但其他服務器 - my2.domain.com(我並不在乎)仍然在狀態欄中顯示爲「受信任」,儘管不存在對話框。 但上面第二篇文章中的問題#3聽起來像是問題所在。但是......我看不出如何解決它。 – 2009-11-11 19:15:44

+0

但是等一下 - 我剛剛注意到,當LTPA服務器'保護模式打開'而myserver'保護模式關閉'時。 如果他們出現在同一個區域,並且這是每個區域功能,這些可能性如何? 背後隱藏着什麼嗎? – 2009-11-11 19:17:56

+0

我剛剛從myserver.domain.com的根目錄導航到myserver.domain.com/somepath for ha-has。狀態欄從「Internet |」更改保護模式:關閉'到'可信站點|保護模式:關閉「 - 因此,IE瀏覽器中會出現用戶界面問題 - 而myserver.domain.com實際上位於」可信站點「區域。即使它沒有顯示在對話框中。 現在看來,我現在只需要弄清楚如何讓這些網站脫離「可信站點」。 我會放入一個針對IE9的功能請求 - 如果在UI中顯示某些內容顯示網站從GP推下來,這將非常棒。 – 2009-11-11 19:26:40

相關問題