django返回的cookie报错:前端报错:"尝试通过Set-Cookie标头设置Cookie时被阻止,因为它具有"SameSite=None"属性,但没有使用"SameSite=None"所必需的"Secure"属性.
时间: 2023-07-06 21:23:26 浏览: 212
这个问题是由于 Chrome 80 版本开始增加了默认的 SameSite 属性,如果在设置 Cookie 的 SameSite 属性为 None 时,同时没有设置 Secure 属性,那么在 Chrome 80 版本及以上浏览器中会报错。
为了解决这个问题,我们需要在设置 Cookie 的时候,将 SameSite 属性设置为 None,并且同时设置 Secure 属性,以确保 Cookie 只能通过 HTTPS 进行传输,从而避免中间人攻击。
在 Django 中,我们可以通过设置 `SESSION_COOKIE_SECURE` 和 `CSRF_COOKIE_SECURE` 两个参数来启用 Secure 属性,同时使用 `SESSION_COOKIE_SAMESITE` 和 `CSRF_COOKIE_SAMESITE` 两个参数来设置 SameSite 属性为 None。
例如,在 settings.py 文件中添加以下代码:
```python
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = 'None'
CSRF_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'
```
这样就能够在 Django 中启用 Secure 和 SameSite 属性,从而避免在 Chrome 80 版本及以上浏览器中报错。
相关问题
前端报错:"尝试通过Set-Cookie标头设置Cookie时被阻止,因为它具有"SameSite=None"属性,但没有使用"SameSite=None"所必需的"Secure"属性.
这是因为浏览器对 Cookie 的安全策略进行了升级,要求在设置 SameSite=None 属性时必须同时设置 Secure 属性。
在 Web 应用中,为了防止跨站点请求伪造攻击,通常会使用 CSRF Token 来进行验证。而为了确保 CSRF Token 能够正确地在跨站点请求中传递,需要将 Cookie 的 SameSite 属性设置为 None。
但是在 Chrome 80 版本之后,浏览器升级了 SameSite 策略,要求在设置 SameSite=None 属性时必须同时设置 Secure 属性。这是为了确保 Cookie 只能通过 HTTPS 进行传输,从而防止中间人攻击。
要解决这个问题,一种方法是将网站迁移到 HTTPS 协议上。另一种方法是在设置 SameSite=None 属性时,同时设置 Secure 属性。例如,在 Django 中,可以在设置 CSRF Token 的 Cookie 时,添加以下代码:
```python
response.set_cookie('csrftoken', token, samesite='None', secure=True)
```
这样就能够消除上述报错了。
阅读全文