11

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

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

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

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

4

3 回答 3

9

这可能是 Chrome 中的错误。请参阅 Chromium 错误 # 696204。在我的情况下,解决方法正在更改SameSite=StrictLax.

于 2017-10-29T12:19:25.337 回答
3

Answering my own question. Turns out that one has to use a 303 (see other) response when redirecting from a post request.

From RFC 2616

10.3.4 303 See Other

The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.

于 2013-09-27T10:46:26.560 回答
3

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

可能是您的 cookie 路径有问题,如果您将 cookie 路径设置为与“/”不同的内容,则所有路径都无法访问它。

于 2013-09-27T09:46:21.580 回答