带有 Set-Cookie Header 的 Safari/Chrome 的开发者控制台中不显示 Cookie,但在查看服务器日志时存在

Posted

技术标签:

【中文标题】带有 Set-Cookie Header 的 Safari/Chrome 的开发者控制台中不显示 Cookie,但在查看服务器日志时存在【英文标题】:Cookies don't show up in developer console of Safari/Chrome with Set-Cookie Header, but exist when looking at server logs 【发布时间】:2019-04-28 22:21:21 【问题描述】:

我正在使用来自我的 python 后端的“Set-Cookie”标头响应为我的 Web 应用程序存储 cookie。

这是我在客户端对函数的 ajax 调用:

在 Chrome 和 Safari 的开发人员工具中,当我查找 cookie 时,cookie 没有出现。

在 Chrome 上,Set-Cookie 甚至不会出现在网络调用的响应标头中。 在 Safari 中,Set-Cookie 响应标头出现并显示在请求/响应 cookie 下, 但是当我检查应用程序的 cookie 时,什么也没有出现。

此外,Safari 中显示的 cookie 数据不正确:它显示了不正确的过期日期和 httpOnly/secure 两者都应该为真。

cookies似乎不存在,但是当我登录服务器时,我清楚地看到cookies存在并且它们出现了 (也 safari 显示它们在请求/响应标头中来回移动)这意味着 cookie 被正确存储并在每次调用标头后发送回服务器。我之前尝试将 httpOnly 设置为 false 并将 secure 设置为 false,但即便如此,cookie 也表现出相同的行为。

这些 cookie 仍处于两种开发工具的监控范围内。如何在开发者工具中正确查看浏览器上的 cookie?这个问题可能是什么?

【问题讨论】:

我现在在 Safari 中看到了这个。该 cookie 肯定已设置(因为服务器可以看到它),并且它在重新启动 Safari 后仍然存在。但是在控制台看不到……这是个问题,因为我要删除! 看到这个答案***.com/a/55414345/1558222。你应该启用它们 【参考方案1】:

您是否尝试过打开服务器 https://*.amazonaws.com 的选项卡并在那里查看?

cookie 将设置在服务器的域中,但您不会在本地服务器的 cookie 存储中看到它。原因是所有网络存储都受同源策略的约束,您的文档只能从自己的域访问存储,服务器只能为其域设置 cookie。

这里的理由是,如果我向您发送了一个流氓文档的链接,即使它们可以从 JS 访问,它也无法泄露您的 SO cookie,向流氓服务器发送请求也不能覆盖 SO 上的 cookie。

【讨论】:

这是正确的。如果您想使用这种 Secure HTTPOnly cookie 方法,您的 API 必须由同一服务器的域托管。就我而言,我通过将我的 api 托管在 api.domainname.com 来解决这个问题【参考方案2】:

尝试禁用chrome://flags/#network-service,它应该可以正常工作。

【讨论】:

以上是关于带有 Set-Cookie Header 的 Safari/Chrome 的开发者控制台中不显示 Cookie,但在查看服务器日志时存在的主要内容,如果未能解决你的问题,请参考以下文章

nginx add_header Set-Cookie 过期不起作用

微信小程序开发-服务端session值取不到;小程序res.header['Set-Cookie']隐藏的坑

在 AWS Cloudfront 源请求中返回带有 set-cookie 标头的响应

php怎么获得头文件中的Set-Cookie

Set-Cookie 标头未出现在 Google Chrome 中

跨域请求response中有Set-cookie,但是Cookie无法写入浏览器问题