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

Ron*_*onK 13 cookies internet-explorer

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

每个实例维护一组饼干的每一个其定义path"/" + .getWebDirRoot()-即/abc,/xyz,/abc123

执行以下流程时:

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

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

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

注:只是为了澄清,这并没有切换时发生http://mydomain.com/abchttp://mydomain.com/xyz -行为被严格限制流动哪里currentUrl.startswith(urlAssociatedWithCookie) == true

我使用Fiddler检查了行为- 我清楚地看到abc123发送的HTTP请求与cookie的值属于abc.

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

Ron*_*onK 22

经过一天多的调查,到处寻找有关IE行为的规范,我什么也没想到 - 除了理解当IE从域xyz和路径看到cookie 时abc,它会发送给任何发送到任何URL的请求域和路径,例如` http:// xyz/abc123 '.

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

Name: mycookie
Path: /abc
Run Code Online (Sandbox Code Playgroud)

我现在创建以下内容:

Name: mycookie
Path: /abc/
Run Code Online (Sandbox Code Playgroud)

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


注意:我检查了RFC的HTTP Cookie,发现了这个:

如果至少
满足下列条件之一,请求路径路径将匹配给定的cookie路径:

o cookie路径和请求路径是相同的.

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

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

应该在这里应用的场景是第3个,但看起来IE在这种情况下不符合RFC ...

  • 对于在Apache Tomcat上部署的每个人:从Tomcat7开始,Tomcat会自动在cookie路径中添加一个斜杠("/")以避免此问题.您可以通过设置`sessionCookiePathUsesTrailingSlash = false`在`context.xml`中禁用此功能(请参阅http://tomcat.apache.org/tomcat-7.0-doc/config/context.html) (4认同)