【发布时间】: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 名称有关,而不是与主机/域有关。