带有 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 标头的响应