Chrome 上未设置第三方 cookie(Django 应用程序)
Posted
技术标签:
【中文标题】Chrome 上未设置第三方 cookie(Django 应用程序)【英文标题】:Third party cookies not set on Chrome (Django App) 【发布时间】:2020-07-14 15:09:22 【问题描述】:我在访问 Chrome 上的某些第三方 cookie 时遇到问题。
Chrome 版本是 80.0.3987.100 (Official Build) (64-bit)
,我想这已经将 SameSite cookie 的新实现设置为 Lax。
但是,在 Django 设置中,我添加了以下内容:
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = None
CSRF_COOKIE_SAMESITE = None
没有运气。
可以看到上面的Request header中没有Cookies
我已尝试在 Postman 上从 Chrome 执行时遇到问题的请求。在通过Cookie: sessionid: <some_id>
之前,我得到完全相同的结果。值得一提的是,这一切在 Firefox 上都没有问题(我可以在请求标头中看到正确设置的 Cookie)。
如果有人有任何想法,将不胜感激。
【问题讨论】:
【参考方案1】:好的,找到了解决方案!
根据this PR 上的对话,我决定采用以下解决方法:
-
创建following middleware
在
django.contrib.sessions.middleware.SessionMiddleware
之前添加中间件
仍然保留这些设置。
=>
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = None
CSRF_COOKIE_SAMESITE = None
上面的 PR 已经合并到 master 中,将于 2020 年 8 月某个时间发布。在此之前,这是最好的解决方法。
【讨论】:
这是截至 8 月 11 日在 Django 2.2 上的正确解决方案。 对于 Django 3.1,根据the docs 应该有引号: SESSION_COOKIE_SAMESITE = 'None' CSRF_COOKIE_SAMESITE = 'None'以上是关于Chrome 上未设置第三方 cookie(Django 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章
求助QAQ chrome要怎么解除cookies的httponly
Chrome Beta 问题:尽管 SameSite cookie 设置为“无”且安全,但未收到第三方 cookie
使用 Elasticache 在 Elastic Beanstalk 上未收到任何 cookie
Chrome 提标 您的浏览器限制了第三方Cookie...解决方法