为服务器自己的域设置 cookie

Setting cookie for the server's own domain

我在客户端和服务器端工作。开发时,我的客户端在 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 才能下载 link 看起来像

https://local.somedomain.com/api/v2/ExportSomething.xlsx

然而,它不存在。由于服务器未指定域,因此它可能有意义。 OTOH,根据 this answer、"You can't modify the cookies of one domain using a servlet or JavaScript hosted on another domain, for security reasons",我 不想 为服务器运行的域之外的任何域设置任何 cookie,所以我'我问 为什么在别无选择的情况下指定任何内容

在 Chromium devtools 中过滤 "Has blocked cookies" 没有显示任何内容,我将其解释为 "everything is fine, cookies came through"。 我错了吗?

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

假设设置cookie时需要指定域,this comment是否正确?

无聊的细节

更新

我刚试过 cookie.setDomain("local.somedomain.com"),还有一个前导点,但没有帮助。

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

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

  1. 浏览器设置拒绝所有 third-party cookie(如果 localhost 从 local.somedomain.com 收到 cookie,将被视为 third-party)
  2. 浏览器扩展正在阻止 cookie
  3. local.somedomain.com 服务器响应不包含允许 localhost 接收 cookie 所需的 CORS headers。 (Access-Control-Allow-Origin 必须存在且不设置为“*”,Access-Control-Allow-Credentials 必须存在且 'true')
  4. Google在逗你

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

关于 SO 的一个相关案例:Confusion regarding SameSite changes with Chrome