【问题标题】:Internet Explorer sends the wrong cookie when the paths overlap路径重叠时 Internet Explorer 发送错误的 cookie
【发布时间】:2012-01-07 17:04:58
【问题描述】:

我们有一个网络应用的多个副本,这些副本部署在同一域的多个路径上。
示例:

每个实例维护一组 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,它们符合预期 - 每个路径创建一个。

【问题讨论】:

    标签: internet-explorer cookies


    【解决方案1】:

    经过一天多的调查并到处寻找有关 IE 行为的规范后,我一无所获 - 除了了解当 IE 看到来自域 xyz 和路径 abc 的 cookie 时,它​​会发送它对发送到以相同域和路径开头的任何 URL 的任何请求,例如`http://xyz/abc123'。

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

    Name: mycookie
    Path: /abc
    

    我现在创建以下内容:

    Name: mycookie
    Path: /abc/
    

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


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

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

    o cookie-path 和 request-path 相同。

    o cookie-path 是 request-path 的前缀,最后一个 cookie-path 的字符是 %x2F ("/")。

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

    这里应该应用的场景是第3个,但看起来IE在这个案例上不符合RFC ...

    【讨论】:

    • 感谢您的彻底调查。知道这一点可能会在未来为我节省很多戏剧性。
    • 这件事发生在我身上(并得出了相同的结论)。感谢您节省了我在 IE 中查找规范和错误描述的时间!
    • 对于在 Apache Tomcat 上部署的每个人:从 Tomcat7 开始,Tomcat 会自动在 cookie 路径中添加斜杠 ("/") 以避免此问题。您可以通过设置sessionCookiePathUsesTrailingSlash=falsecontext.xml 中禁用此功能(请参阅tomcat.apache.org/tomcat-7.0-doc/config/context.html
    • 这似乎在 IE11 中已修复,如果你碰巧还在乎的话!
    • @sparrowt - 甚至远程 :)
    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2015-03-19
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多