为服务器自己的域设置 cookie



我在客户端和服务器上工作。开发时,我的客户端在http://localhost:3000/上运行,而我的服务器在https://local.somedomain.com上运行。服务器发送一个类似 cookie

set-cookie: a=aB5Th....;Path=/;Expires=Sun, 02-Aug-2020 11:26:36 GMT;Max-Age=5184000

下载链接需要此 cookie

,如下所示
https://local.somedomain.com/api/v2/ExportSomething.xlsx

但是,它不存在。由于服务器未指定域,因此可能有意义。OTOH,根据这个答案,"出于安全原因,你不能使用托管在另一个域上的 servlet 或 JavaScript 修改一个域的 cookie",并且我不想为任何域设置任何 cookie,除了运行服务器的域,所以我问为什么在别无选择的情况下指定任何东西

在 Chromium devtools 中过滤"已阻止 cookie"什么也没显示,我会将其解释为"一切都很好,cookie 通过了"。我错了吗?

奇怪的是,它曾经在一两周前工作过,至少在 Chromium 中是这样(我非常确定这一点,因为我在出口上工作了几个小时(。现在它不适用于我尝试过的四种浏览器。有什么解释吗?

假设在设置 cookie 时有必要指定域,此注释是否正确?

无聊的细节

  • 每个请求都以相同的方式设置 Cookie
  • 上述下载链接旁边的任何请求都没有使用 cookie
  • CORS显然是需要的并且有效,每个请求都以相同的方式处理
  • 不涉及其他服务器

更新

我刚刚尝试了cookie.setDomain("local.somedomain.com"),也用一个前导点尝试了这个,但它没有帮助。

我还尝试省略Max-Age(这也删除了自动添加的Expires(,但它也没有帮助(有人声称只有会话 cookie 才能在本地主机上工作(。

这种行为的可能原因(我能想到(:

  1. 浏览器设置拒绝所有第三方 cookie(如果本地主机收到来自local.somedomain.com的 cookie,这将被视为第三方(
  2. 浏览器扩展程序阻止了 Cookie
  3. local.somedomain.com服务器响应不包括允许localhost接收 Cookie 所需的 CORS 标头。(访问控制允许源必须存在且未设置为"*",访问控制允许凭据必须存在且为"true"(
  4. 谷歌在惹你

最后一点实际上不是开玩笑,很可能是这里的原因。Google一直在调整Chromium中cookie的"SameSite"规则,记录如下:https://www.chromium.org/updates/same-site

关于SO的相关案例:关于Chrome的SameSite更改的混淆

相关内容

  • 没有找到相关文章

最新更新