Jam*_*mes 18 cookies tomcat google-chrome
我最近注意到,当我重新启动我的Tomcat Web服务器时,Chrome浏览器无法再存储cookie.即tomcat使用cookie进行http会话,浏览器无法再获取其http会话,我们用于存储登录用户的cookie也失败,用户不会保持登录状态.
这似乎是Chrome的新问题,也许来自最近的更新,我不记得以前见过它了.如果我关闭Chrome浏览器,然后重新打开它,则可以再次使用(直到再次重新启动服务器).
问题不会发生在Firefox上,似乎是Chrome中的一个错误.
有没有人注意到这个问题,或者知道解决方案?
我在context.xml中找到了一些关于Chrome/tomcat cookie问题的帖子以及设置的建议,sessionCookiePathUsesTrailingSlash = false但这不能解决问题.
它似乎可能与支持https和http的网站有关,并且在两者之间切换(尽管它确实发生在不支持https的网站上......)
好的,我现在可以重新创建问题,步骤是.
这只发生在Chrome上,并且仅在Chrome更新后才会在使用http的登录页面上添加"不安全"标记
好的,我把它添加到我的web.xml中
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
Run Code Online (Sandbox Code Playgroud)
这并没有解决问题,但是问题总是通过http发生,即使http不再能够存储JSESSIONID cookie.我试过<secure>false</secure>但仍然遇到了旧问题.所以,它至少与这个设置有关.有人有主意吗?
Chrome上记录的错误,https: //bugs.chromium.org/p/chromium/issues/detail?id = 698741
ped*_*ofb 11
我能够使用Chrome重现您的问题:只需HttpSession要从HTTPS区域创建.任何后续HTTP请求都不会发送会话cookie,并且Set-Cookie:JSESSIONID=chrome会忽略任何通过HTTP的尝试.
当用户从HTTPS切换到HTTP时,问题已本地化.即使重新启动服务器并且工作正常,也会保留HTTPS会话cookie.(我使用Tomcat6,Tomcat 9和使用SSL的apache代理进行了测试)
这是Tomcat在从HTTPS创建会话时发送的响应标头
Set-Cookie: JSESSIONID=CD93A1038E89DFD39F420CE0DD460C72;path=/cookietest;Secure;HttpOnly
Run Code Online (Sandbox Code Playgroud)
这个用于HTTP(注意Secure缺少)
Set-Cookie:SESSIONID=F909DBEEA37960ECDEA9829D336FD239;path=/cookietest;HttpOnly
Run Code Online (Sandbox Code Playgroud)
Chrome忽略了第二个set-Cookie.另一方面,Firefox和Edge用Securenot 替换cookie secured.为了确定应该采取的正确行为,我已经审查了RFC2109
4.3.3 Cookie管理
如果用户代理收到的Set-Cookie响应标头的NAME与预先存在的cookie相同,并且其Domain和Path属性值与预先存在的cookie完全匹配(字符串),则新cookie将取代旧cookie.
所以,很明显是一个chrome bug,正如你在问题中所假设的那样:HTTP cookie应该取代HTTPS设置的那个
从Chrome手动删除cookie或在服务器端使会话无效使其再次起作用(如果在这些操作之后使用HTTP创建会话)
默认情况下,使用SecureHTTPS请求时创建JSESSIONID cookie .我想这就是Chrome不允许覆盖cookie的原因.但是,如果您尝试<secure>false</secure>在web.xmlTomcat中设置忽略它并且Set-Cookie标头随之发送Secure
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
Run Code Online (Sandbox Code Playgroud)
更改cookie名称,设置sessionCookiePathUsesTrailingSlash或删除HttpOnly没有任何效果
我没有找到解决此问题的方法,除非在用户从HTTPS切换到HTTP时使服务器会话无效.
最后我打开了一个关于铬的错误:https://bugs.chromium.org/p/chromium/issues/detail?id = 698839
更新 此问题最终标记为"无法修复",因为它是故意更改.请参阅https://www.chromestatus.com/feature/4506322921848832
严格的安全Cookie
这会对标有"安全"属性的cookie添加限制.目前,安全cookie无法通过不安全(例如HTTP)来源访问.但是,不安全的起源仍然可以添加安全cookie,删除它们或间接驱逐它们.此功能会修改cookie jar,以便不安全的起源不会以任何方式触及安全cookie.这确实会导致cookie被驱逐,这仍然可能导致删除安全cookie,但只有在所有非安全cookie被驱逐之后.