Django - 检查 cookie 的“SameSite”属性

use*_*168 7 django cookies python-3.x

在我的 Django 应用程序中,我想检查特定 cookie 是否具有“SameSite=None”。

我正在使用此代码读取 cookie 的值,

cookiesid = request.COOKIES["cookiesid"]
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何检查“SameSite”属性,似乎没有方法可以通过 request.COOKIES[""] 来检查它

我该如何检查?

我正在使用 Python 3.6.9 和 Django 3.1

jua*_*aza 15

更深入一点。

  1. 在生产集中:
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'None'
Run Code Online (Sandbox Code Playgroud)
  1. 不要在开发中设置任何上述标志。如果连接不安全,它会说无法使用 SameSite=None 设置 cookie。

还要确保你有 Django 3,在 Django 2 中存在一个 bug,它会输出一个 ValueError。


小智 10

我最近也遇到了跨域 Cookie 的问题,我已经追踪到谷歌浏览器逐渐推出他们的安全更新,如果没有设置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'
Run Code Online (Sandbox Code Playgroud)

祝你好运!