【问题标题】:Tomcat 7 is ignoring cookies?Tomcat 7 忽略 cookie?
【发布时间】:2012-02-26 09:44:20
【问题描述】:

我正在尝试从 Tomcat 5.5 升级到 Tomcat 7,几乎一切正常——我只有一些 cookie 在 Tomcat 5.5 上通过,但在 Tomcat 7 上消失了。也就是说,Firebug 确认在这两种情况下都发送了 cookie,但是在 Tomcat 5.5 上它们出现在 request.getCookies() 调用中,而在 Tomcat 7 中它们没有。一些 cookie 仍然显示(例如 JSESSIONID),但缺少一些。

这是在同一服务器、端口等上运行的同一应用程序,我刚刚关闭 Tomcat 5.5,启动 7,cookie 不再通过。

如果相关,两个 Tomcat 实例都位于运行在不同服务器上的 Apache 代理之后。不过,这似乎并不相关,因为 Apache 显然能够将 cookie 传递给 Tomcat 5.5。

我的猜测是它是某种安全功能,但我无法弄清楚它会是什么。缺少的 cookie 用于域 .domain.org,而通过的 cookie(如 JSESSIONID)用于主机 subdomain.domain.org(粗体文本只是例如,显然)。

我尝试在上下文中将 useHttpOnly 设置为 false 并将 crossContext 设置为 true,以防它与其中之一有关,但它没有帮助。除了这两个设置之外,Tomcat 7(或 Tomcat 6,就此而言)中是否还有其他新功能可能导致它遗漏 cookie?如果是这样,是否有方便的解决方法?

编辑:我忘了提到它可能与 cookie 路径没有任何关系——不起作用的 cookie 的路径是“/”,而起作用的 cookie 有不同的“/” "、"/application" 和 "/application/"。

【问题讨论】:

  • 更新:我在 Tomcat 6.0 上尝试过,但使用相同的 cookie 时遇到了问题,但方式不同。有问题的 cookie 名称包含冒号(一个类似于 FOO:BAR,另一个更疯狂,FOO:BAR::BLAH:BLAH),在这两种情况下,Tomcat 6.0 只能找到第一个冒号之前的文本。但它确实找到了 cookie……所以这实际上可能与 cookie 名称有关,而不是与主机/域有关。

标签: java tomcat cookies


【解决方案1】:

我可能会迟到,但我遇到了类似的问题,需要一个完全不同的解决方案。

问题在于登录数据存储在 cookie 中,然后将密钥硬编码在文件中以确认谁是谁。由于 WAR 打包,路径在传输中丢失了,我唯一要做的就是更正服务器上正确 JSON 文件的路径。

因此,问题不在于 Tomcat,而在某种程度上,事情被转移并调用了这些东西。

花了半天的时间来定位问题(我以为在Tomcat中需要进行一些设置),但是当我意识到JSON的路径关闭时,这很简单。

【讨论】:

    【解决方案2】:

    我想通了!问题是 cookie 名称中的冒号。显然,HTTP 规范不允许不引用的冒号。 Tomcat 在 5.5.26 中开始执行此功能——巧合的是,我一直在使用 5.5.25。

    它不能解决我的问题——这些 cookie 是由第三方软件设置的——但它确实回答了这个问题!

    如果您的 cookie 名称中有冒号,则它们需要被引用(例如“:”),或者您需要使用 Tomcat 5.5.25 或更早版本。我可能会尝试配置我的 Apache 代理以在通过时修改 cookie...如果可行,我将更新此答案。

    在 cmets on this bug report 中有更多关于此的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 2011-04-28
      • 2013-03-07
      相关资源
      最近更新 更多