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

14

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

每个实例都维护一组cookie,每个cookie将其"path"定义为"/"+.getWebDirRoot() - 即"/abc"、"/xyz"、"/abc123"。
在执行以下流程时:
- 登录http://mydomain.com/abc - 执行某些活动 - 注销 - 登录http://mydomain.com/abc123 - 执行某些活动<--失败
最后一步失败是因为IE向我们发送了不正确的cookie - 它发送了http://mydomain.com/abc的cookie而不是http://mydomain.com/abc123的cookie。
在FireFox中不会发生这种情况。(我没有尝试其他浏览器。)
这是否是IE的已知行为(我测试过IE9和IE8)?
有没有方法可以在程序上克服它?

注意: 仅需澄清,当从http://mydomain.com/abc切换到http://mydomain.com/xyz时不会发生此情况 - 行为严格限制于currentUrl.startswith(urlAssociatedWithCookie) == true的流程中。

我使用Fiddler检查了该行为 - 我清楚地看到发送给abc123的HTTP请求带有属于abc的cookie值。

我还在FireFox上检查了cookie,它们的表现如预期 - 每个路径都创建了一个cookie。

1个回答

24
在调查了一天以上并在IE的行为上寻找规范时,我什么都没找到 - 除了这样一个理解:当IE看到来自域名xyz和路径abc的cookie时,它会将其发送到任何以相同域名和路径开头的URL上发送的请求中,例如`http://xyz/abc123'。

所以最终我做的是更改我的cookie创建方式,不再使用:

Name: mycookie
Path: /abc

我现在创建了以下内容:
Name: mycookie
Path: /abc/

这解决了没有回弹的问题——cookie已成功保存在客户端,并且始终向服务器发送正确的cookie。


注意: 我查阅了HTTP Cookies的RFC,并发现以下内容:

如果至少满足以下条件之一,则请求路径与给定cookie路径相匹配:

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

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

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

应该适用于此处的情况是第三种情况,但看起来IE在这种情况下不符合RFC的规定...


感谢您进行彻底的调查。知道这个可能会在将来为我节省很多麻烦。 - Lachlan McDonald
我也遇到了同样的问题(并得出了相同的结论)。感谢您节省了我在IE中查找错误规范和描述的时间! - helios
4
针对所有使用 Apache Tomcat 进行部署的人:从 Tomcat7 开始,Tomcat 会自动在 cookie 路径后面添加一个斜杠("/")以避免此问题。您可以在 context.xml 中设置 sessionCookiePathUsesTrailingSlash=false 来禁用此功能(请参阅 http://tomcat.apache.org/tomcat-7.0-doc/config/context.html)。 - Stefan Haberl
如果你还在关注的话,这个问题似乎已经在IE11中得到了修复! - sparrowt
@sparrowt - 一点也不 :) - RonK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接