Django - 检查 cookie 的 "SameSite" 属性

14
在我的Django应用程序中,我想检查特定cookie是否具有"SameSite=None"。 我正在使用以下代码读取cookie的值:
cookiesid = request.COOKIES["cookiesid"]

然而,我不知道如何检查“SameSite”属性,似乎没有通过request.COOKIES[""]检查它的方法。

我该怎么办?

我正在使用Python 3.6.9和Django 3.1

2个回答

31

最近我也遇到了跨域的Cookie问题,我发现是由于Google Chrome逐步推出其安全更新,如果未设置,则会强制将 SameSite 属性设置为 Lax

Lax意味着在Google Chrome上默认情况下会阻止跨域Cookie

考虑到您正在检查代码中Cookie的属性,我认为如果没有 SameSite 属性,则您没有设置它,因此Google Chrome强制该属性设置为 Lax

既然您已经说明您使用Django 3.1,则 settings.py 文件中的以下四个条目可能会解决您的问题(就像对我有用一样):

CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'None'

祝你好运!


1
文档链接:https://docs.djangoproject.com/en/3.2/ref/settings/#session-cookie-samesite 和 https://docs.djangoproject.com/en/3.2/ref/settings/#csrf-cookie-samesite - Simone Pozzoli

13

深入一点。

  1. 在生产环境中设置:
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'None'
  1. 在开发过程中不要设置上述标志。如果连接不安全,则会显示无法使用SameSite = None设置Cookie。

还要确保您使用的是Django 3,因为在Django 2中存在错误,会输出ValueError。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接