302重定向到同一域上的页面后未发送Cookie

时间:2013-09-27 09:19:54

标签: http servlets redirect

我对此非常困惑。我的Web应用程序使用Spring Security,它依赖于JSESSIONID cookie来维护用户会话。

我的一个页面会将302重定向到同一个域中的另一个页面,仍然是http,而不是切换到https或任何花哨的东西。出于某种原因,浏览器(在这种情况下为Chrome)不会通过第二个请求传递cookie,并且用户会丢失其会话。

这是预期的http行为吗?我可能错过了一些东西..

为了清楚起见,cookie已在重定向之前设置,我没有在与重定向相同的响应中设置cookie。

3 个答案:

答案 0 :(得分:2)

302不删除任何cookie,因此我认为您正在更改主机/端口或服务器使cookie过期。查看这3个请求(302,302之前,302之后)并搜索与Set-Cookie标头相关的内容并使用过期值。

可能是你的cookie路径有问题,如果你将cookie路径设置为与'/'不同的东西,它将无法被所有路径访问。

答案 1 :(得分:2)

这可能是Chrome中的一个错误。请参阅Chromium bug#696204。在我的情况下,解决方法是将SameSite=Strict更改为Lax

答案 2 :(得分:1)

回答我自己的问题。事实证明,当从post请求重定向时,必须使用303(参见其他)响应。

来自RFC 2616

  

10.3.4 303见其他

     

可以在不同的URI下找到对请求的响应   应该使用该资源上的GET方法检索。这种方法   存在主要是为了允许输出POST激活的脚本   将用户代理重定向到选定的资源。新的URI不是   替换最初请求的资源的引用。 303   响应绝不能缓存,而是对第二个的响应   (重定向)请求可能是可缓存的。