【发布时间】:2017-06-27 13:57:34
【问题描述】:
我最近注意到,当我重新启动 Tomcat 网络服务器时,Chrome 浏览器无法再存储 cookie。即tomcat使用cookie进行http会话,浏览器无法再获取它的http会话,我们用来存储登录用户的cookie失败,用户不会保持登录状态。
这似乎是 Chrome 的一个新问题,可能来自最近的更新,我不记得以前见过它。如果我关闭 Chrome 浏览器,然后重新打开它,就可以了(直到服务器再次重新启动)。
这个问题在 Firefox 上没有发生,似乎是 Chrome 中的一个错误。
有其他人注意到这个问题,或者知道解决方案吗?
我发现了一些关于 Chrome/tomcat cookie 问题和设置建议的帖子, sessionCookiePathUsesTrailingSlash=false 在 context.xml 但这并不能解决问题。
这似乎与同时支持https和http的网站有关,并在两者之间切换(虽然它确实发生在不支持https的网站上......)
好的,我现在可以重新创建问题,步骤是。
- 通过 https 连接到网站
- 注销/登录
- 通过 http 连接到网站
- 无法再存储 Tomcat JSESSIONID cookie(奇怪的是存储了用户/密码 cookie)
这仅发生在 Chrome 上,并且仅在 Chrome 更新后在使用 http 的登录页面上添加了“不安全”标志
好的,我将它添加到我的 web.xml 中
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
这并没有解决问题,而是使问题总是通过 http 发生,即使 http 不再能够存储 JSESSIONID cookie。
我试过<secure>false</secure>,但还是遇到了老问题。
因此,它至少与此设置有关。有人有什么想法吗?
在 Chrome 上记录错误, https://bugs.chromium.org/p/chromium/issues/detail?id=698741
【问题讨论】:
-
所以好像是新版Chrome的Chrome浏览器打开时间过长,突然无法保存网站的cookies,JSESSIONID突然没有设置。当 www 版本开始失败时,不使用“www”的同一网站可以正常工作,https 似乎也可以正常工作,很奇怪。
-
我猜这是最近 chrome 更新中的一个错误,似乎已经修复了。但是如果有人没有重新启动chrome,他们仍然存在在某些状态下无法正确存储cookie的bug版本。
-
Chrome 还是会出现这个问题,不知何故,如果你让它运行时间过长,它就会开始不为某些网站保留 cookie
-
这不能回答您的问题,因此它只是一个评论:尝试编写一个 Selenium 集成测试来重现该问题。一旦它被自动化,您就可以尝试变体,也许可以找到解决方法,报告错误等。可重现的错误通常会更快地修复。
-
我无法始终如一地重现它。一旦浏览器停止保存cookies,它就无法正常工作,但是一旦我重新启动chrome,它就又好了。这个问题出现在我们的几个 Tomcat 网站上,并且来自几台不同的机器,始终仅来自 Chrome,并且在重新启动后始终正常。仅在最后一次 Chrome 更新后的最后一个月左右,在不使用 https 的任何登录页面上添加了“不安全”标志
标签: google-chrome tomcat cookies