当路径重叠时,Internet Explorer会发送错误的cookie

时间:2011-11-28 07:00:36

标签: internet-explorer cookies

我们有多个网络应用程序副本,它们部署在同一个域的多个路径上 例如:

每个实例都维护一组Cookie,每个Cookie将其path定义为"/" + .getWebDirRoot() - 即/abc/xyz/abc123

执行以下流程时:

最后一步失败,因为IE向我们发送了错误的Cookie - 它发送了http://mydomain.com/abc而不是http://mydomain.com/abc123

的Cookie

这在FireFox中不会发生。 (我还没有尝试过任何其他浏览器。)

这是IE的已知行为(我测试了IE9IE8)吗? 有没有办法克服它(以程序化的方式)?

注意:为了澄清一下,从http://mydomain.com/abc切换到http://mydomain.com/xyz时不会发生这种情况 - 行为严格限制在currentUrl.startswith(urlAssociatedWithCookie) == true

我使用 Fiddler 检查了行为 - 我清楚地看到abc123发送的HTTP请求,其中包含属于abc的Cookie的值。

我还检查了FireFox上的cookie,它们是预期的 - 每个路径创建一个。

1 个答案:

答案 0 :(得分:21)

经过一天多的调查,到处寻找有关IE行为的规范,我什么也没想到 - 除了了解IE何时看到来自域xyz的Cookie和路径{{1}它将在发送到以相同域和路径开头的任何URL的任何请求上发送它,例如`http://xyz/abc123”。

所以我最终做的是改变我的cookie创建,而不是:

abc

我现在创建以下内容:

Name: mycookie
Path: /abc

这解决了没有ricochetes的问题 - cookie在客户端上成功保存,并且正确的cookie总是被发送到服务器。


注意:我检查了RFC for HTTP Cookies,发现了这个:

  

请求路径路径 - 如果至少有一个,则匹配给定的cookie路径   以下条件成立:

     

o cookie路径和请求路径完全相同。

     

o cookie-path是请求路径的前缀,最后一个是前缀         cookie路径的字符是%x2F(“/”)。

     

o cookie-path是请求路径的前缀,第一个是         cookie中未包含的请求路径的字符 -         path是%x2F(“/”)字符。

此处应该应用的方案是第3个,但看起来Name: mycookie Path: /abc/ 在这种情况下不符合RFC ...