在Django 2.2上使用samesite none设置cookie

2024-10-05 13:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为版本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

我已尝试以下方法:

  1. 在设置中全局设置,例如CSRF_COOKIE_SAMESITE = 'None'SESSION_COOKIE_SAMESITE = 'None'
  2. 通过set_cookie(name, value=value, secure=True, samesite='None')在需要它的cookie上设置此选项

这两种方法都不起作用。我还尝试安装了包^{}并添加了它的中间件,但是它似乎没有什么不同

# example
MIDDLEWARE = (
    "django_cookies_samesite.middleware.CookiesSameSite",
    # other middleware
)

当我将值设置为None而不是'None'时,不会添加任何值,我相信当没有值时,Chrome会返回到lax

我还尝试过在Djangoset_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


Tags: pathdjangoname版本nonevaluecookieresponse

热门问题