2012-02-03 66 views
2

我试图从Tomcat 5.5升级到Tomcat 7,和差不多一切正常 - 我只是有一些cookie通过Tomcat 5.5,但在Tomcat 7上消失。也就是说,Firebug确认Cookie在两种情况下都被发送,但在Tomcat 5.5中,它们显示在request.getCookies()调用中,而在Tomcat 7中则不显示。一些cookies仍然显示出来(例如JSESSIONID),但是有一些cookie丢失。Tomcat 7忽略cookie?

这是运行在同一个服务器,端口等上的同一个应用程序,我只关闭了Tomcat 5.5,启动7,并且cookies不再通过。

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

我的猜测是这是某种安全功能,虽然我还没有弄清楚它会是什么。缺失的cookie用于域名。domain.google.org,而通过的cookie(如JSESSIONID)用于主机subdomain.domain.org(粗体文本仅仅是一个例子,显然)。

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

编辑:我忘了提及,它可能没有任何与cookie路径有关 - 不工作的cookie有一个路径“/”,并且工作的cookie有不同的“ /“,”/ application“和”/ application /“。

+0

更新:我在Tomcat 6上试了一下。0,并且它有相同的cookies的麻烦,但方式不同。问题中的cookie名称包含冒号(一个像FOO:BAR,另一个更疯狂,FOO:BAR :: BLAH:BLAH),并且在这两种情况下,Tomcat 6.0都只能找到第一个冒号的文本。但它确实找到了Cookie ......所以这实际上可能与cookie名称有关,而不是主机/域名。 – EMS 2012-02-06 12:52:44

回答

2

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

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

如果您的Cookie名称中含有冒号,或者需要引用它们(例如“:”),或者您需要使用Tomcat 5.5.25或更高版本。我可能会尝试配置我的Apache代理来修改它们途中的cookie ......如果这样,我会更新这个答案。

在评论on this bug report中有更多关于此的更多细节。

0

我可能会迟到派对,但我有类似的问题,需要一个非常不同的解决方案。

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

因此,这个问题不是在Tomcat中,而是以某种方式传递事件并调用这些事情。

花了一天的时间来找到问题(我认为有一些设置要在Tomcat中完成),但是一旦我意识到到JSON的路径关闭,这非常简单。