2011-11-28 30 views
11

我們在同一個域上的多個路徑上部署了多個Web應用程序副本。
實施例:當路徑重疊時,Internet Explorer發送錯誤的Cookie

每個實例維護一組餅乾中的每一個定義其path作爲"/" + .getWebDirRoot() - 即/abc/xyz/abc123

當執行流程如下:

最後一步失敗了ince IE發送給我們不正確的cookie - 它發送一個爲http://mydomain.com/abc而不是一個http://mydomain.com/abc123

這不會發生在FireFox中。 (而且我還沒有嘗試過任何其他瀏覽器)。

這是已知的行爲IE(我測試了IE9IE8)?
有沒有辦法來克服它(以編程方式)?

注:我想弄清楚,這並不http://mydomain.com/abchttp://mydomain.com/xyz切換時發生 - 行爲被嚴格限制到currentUrl.startswith(urlAssociatedWithCookie) == true

我檢查使用提琴手行爲流 - 我清楚地看到HTTP請求abc123與屬於abc的cookie的值一起發送。

我還檢查了FireFox上的cookies,它們和預期的一樣 - 每個路徑創建一個。從理解除了當IE看見來自域xyz和路徑abc一個cookie,它會發出它發送的任何要求 -

回答

19

調查時間超過一天,到處找對IE的行爲規範後,我想出了什麼到以相同的域和路徑開始的任何URL,例如`http://xyz/abc123'。

所以最終我所做的是改變我的cookie創建,並代替:

Name: mycookie 
Path: /abc 

我現在創建以下文件:

Name: mycookie 
Path: /abc/ 

這沒有ricochetes解決了這個問題 - Cookie是在客戶端上成功保存,並且正確的cookie始終發送到服務器。


注:我檢查RFC for HTTP Cookies和發現這一點:

的請求路徑的路徑相匹配的給定的cookie的路徑的
以下條件是否至少一個成立:

o cookie路徑和請求路徑是相同的。

o cookie路徑是請求路徑的前綴,cookie路徑的最後一個 字符是%x2F(「/」)。

o cookie路徑是請求路徑的前綴,並且未包含在cookie- 路徑中的請求路徑的第一個 字符是%x2F(「/」)字符。

應該在這裏採用的是3號的場景,但它看起來像IE不會在這種情況下,RFC符合...

+0

感謝了深入調查。知道這可能會在未來爲我節省很多戲劇。 –

+0

它發生在我身上(並得出了相同的結論)。感謝您節省我的時間來找到規範和在IE瀏覽器中的bug的描述! – helios

+3

對於在Apache Tomcat上部署的每個人:從Tomcat7開始Tomcat會自動向cookie路徑添加尾部斜槓(「/」)以避免此問題。你可以通過設置'sessionCookiePathUsesTrailingSlash = false'來禁用'context.xml'中的這個特性(參見http://tomcat.apache.org/tomcat-7.0-doc/config/context.html) –