首页 > 解决方案 > 在 Django 测试客户端响应中测试 SameSite 和安全 cookie

问题描述

我有一个 Django 3.1.7 API。到目前为止,我一直在通过 Django 3.1 之前的自定义中间件在响应中添加SameSiteSecurecookie,具体取决于用户代理,并带有自动化测试。现在 Django 3.1 可以自己添加这些 cookie 键,我删除了自定义中间件,仍然想测试响应中 cookieSameSite的存在。Secure

因此,正如 Django 文档所说,我在 settings.py 中添加了以下常量:

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

但是当我在测试中查看响应的内容时,我不再得到任何SameSitecookieSecure键。我打印了 cookie 的内容,但它不存在。

为什么?

这是我的测试:

agent_string = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.2227.0 Safari/537.36"
from django.test import Client
test_client = Client()
res = test_client.get("/", HTTP_USER_AGENT=agent_string)
print(res.cookies.items())

为了以防万一,我还尝试了 DRF 测试客户端,结果相同:

agent_string = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.2227.0 Safari/537.36"
from rest_framework.test import APIClient
test_client = APIClient()
res = test_client.get("/", HTTP_USER_AGENT=agent_string)
print(res.cookies.items())

标签: djangocookiesdjango-rest-frameworksamesite

解决方案


推荐阅读