我正在尝试为版本 2.2.x
上的 Django 项目设置一个特定的 cookie,使其具有 samesite='None'。我继续收到以下错误。
raise ValueError('samesite must be "lax" or "strict".')
我可以看到来自venv/lib/python3.9/site-packages/django/http/response.py
if samesite:
if samesite.lower() not in ('lax', 'strict'):
raise ValueError('samesite must be "lax" or "strict".')
self.cookies[key]['samesite'] = samesite
我尝试过以下操作:
CSRF_COOKIE_SAMESITE = 'None'
、SESSION_COOKIE_SAMESITE = 'None'
set_cookie(name, value=value, secure=True, samesite='None')
在需要它的 cookie 上设置它这两种方法都行不通。我还尝试安装包 django-cookies-samesite
并添加它的中间件,但它似乎没有什么区别。
# example
MIDDLEWARE = (
"django_cookies_samesite.middleware.CookiesSameSite",
# other middleware
)
当我将值设置为 None
而不是 'None'
时,不会添加任何值,我相信 Chrome 在没有值时会回退到 lax
。
我也试过在 Django set_cookie
之外设置一个 cookie,但没有任何运气:
# this fails with AttributeError: 'JsonResponse' object has no attribute 'COOKIES'
response["Set-Cookie"] = f"{name}={value}; Secure={False}; SameSite='None'; Path=/"
# this adds the cookie however doesn't parse it correctly so it fails
response.cookies[name] = f"{name}={value}; Secure={False}; SameSite='None'; Path=/"
# eg
Set-Cookie: my_name="my_value Secure=False\073 SameSite='None'\073 Path=/"
# where the other cookies look like
Set-Cookie: my_name=my_value; expires=Wed, 28 Apr 2021 02:51:02 GMT; Max-Age=2592000; Path=/
有没有办法解决这个问题?我可以看到较新版本的 Django 支持这一点,但我想看看是否有办法解决我们当前版本的 Django (2.2
)。