为服务器自己的域设置Cookie

问题描述 投票:0回答:1

我同时在客户端和服务器上工作。开发时,我的客户端在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,根据this answer,“出于安全原因,您不能使用托管在另一个域上的servlet或JavaScript来修改一个域的cookie”,而我不想为任何一个cookie设置任何cookie域,而不是运行服务器的域,所以我问为什么在没有选择的情况下为什么要指定任何东西

在Chromium devtools中过滤“已阻止的cookie”一无所获,我认为这是“一切都很好,cookies通过了”。 我错了吗?

奇怪的是,它曾经在一个或两个星期前起作用,至少在Chromium中起作用(而且我非常确定这一点,因为我在出口上工作了几个小时)。现在,它在我尝试过的四种浏览器中都无法使用。 任何解释吗?

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

钻孔细节

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

更新

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

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

java servlets cookies cors
1个回答
0
投票

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

  1. 浏览器设置拒绝所有第三方cookie(如果localhost从local.somedomain.com接收cookie,则将其视为第三方)
  2. 浏览器扩展程序阻止了Cookie
  3. local.somedomain.com服务器响应不包含必要的CORS标头,以允许localhost接收cookie。 (必须存在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

© www.soinside.com 2019 - 2024. All rights reserved.