【问题标题】:Http OPTIONS is resetting JSESSIONIDHttp OPTIONS 正在重置 JSESSIONID
【发布时间】:2015-07-16 07:45:19
【问题描述】:

我最近注意到某些(所有?)浏览器不发送带有 OPTIONS 请求的 cookie,但会话(可以理解)发送带有新会话 ID 的 cookie 响应来响应这些请求。 (OPTIONS 请求用于在发送 AJAX 请求之前探测 CORS 访问控制标头。)

我的具体场景如下:

  1. 请求https://my-domain.appspot.com
    一个。接收带有新会话 ID 的 cookie
  2. https://my-domain.appspot.com 发出 AJAX OPTIONS 请求以探测 CORS 标头(由浏览器自动生成)
    一个。浏览器不发送 cookie
    湾。会话以 Set-Cookie 标头和新会话 ID 响应

  3. https://my-domain.appspot.com 的后续请求使用不同的会话 ID

  4. 由于会话 ID 不匹配,CORS 过滤器会阻止请求

如何防止在第 2 步中创建新的会话 ID?或者如何避免我的请求在上述情况下失败?

【问题讨论】:

  • 你能发布你的前端 Ajax 请求代码吗?例如,如果您使用 Angular,则需要为要跨域发送的 cookie 提供“withCredentials”。

标签: google-app-engine session cookies


【解决方案1】:

您应该确保您的服务器单独处理 OPTIONS 请求,并且不会通过通常的过滤器运行它们(假设您使用的是基于 Java 的后端)。但请确保 CORS 过滤器将所有 Allow-* 标头添加到它们各自的响应中。

这些请求应被视为未经身份验证,这意味着它们不需要凭据,不绑定到特定会话,最重要的是不要设置任何可能影响您的会话的 cookie。

由于会话 ID 不匹配,CORS 过滤器会阻止请求。

这是一种误解。 CORS 与任何用户会话无关。由于新创建的会话 ID 无效,是您的服务器身份验证逻辑阻止了请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2014-03-31
    • 2013-06-02
    • 2015-02-20
    • 2017-10-20
    • 2016-06-14
    • 2019-07-08
    相关资源
    最近更新 更多