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...解决方法

适用于 iOS 的 Chrome:Cookie 的“始终允许”

Chrome升级后禁用三方Cookie,理解Cookie的SameSite新属性!