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

Kim*_*ble 4 redirect servlets http

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

我的其中一个页面执行302重定向到同一域中的另一个页面(仍为http),而不切换到https或其他任何形式。出于某种原因,浏览器(在本例中为Chrome)未通过第二个请求传递cookie,并且用户失去了会话。

这是预期的http行为吗?我可能会丢失一些东西。

请注意,Cookie已在重定向之前设置,我没有在与重定向相同的响应中设置Cookie。

Vác*_*ych 5

这可能是Chrome中的错误。请参阅Chromium bug#696204。就我而言,解决方法已更改SameSite=StrictLax


Kim*_*ble 3

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

来自 RFC 2616

10.3.4 303 查看其他

可以在不同的 URI 下找到对请求的响应,并且应该使用该资源上的 GET 方法来检索。此方法的存在主要是为了允许 POST 激活的脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。303 响应不得被缓存,但对第二个(重定向)请求的响应可能是可缓存的。

  • 使用 303 而不是 302 已经解决了您的 cookie 问题吗?看起来很奇怪。如果 cookie 域和路径设置正常,302 不应阻止 cookie 使用。 (2认同)
  • 303 对我使用 Google Chrome / Mac OS 的情况没有帮助。 (2认同)