You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django CORS环境下HTTP无法设置Cookie问题排查求助

解决Django非HTTPS环境下Session Cookie设置被拦截问题

问题根源

浏览器拦截Cookie的核心原因:当Cookie的SameSite设为None时,现代浏览器强制要求必须搭配Secure属性(仅HTTPS环境生效),但你当前用HTTP协议,所以即使代码里指定secure=False,浏览器仍会拒绝存储这个Cookie。另外你手动重复设置sessionid Cookie的操作是多余的——Django的auth.login()已经自动完成了session Cookie的设置。

分步解决

1. 修正Session Cookie的SameSite配置

修改settings.py中的SESSION_COOKIE_SAMESITE值,非HTTPS环境下不能用None:

SESSION_COOKIE_SAMESITE = "Lax"  # 替换原有的"None"

同时删除views.py中手动设置sessionid Cookie的代码:

# 删掉这行:
response.set_cookie("sessionid", request.session.session_key, secure=False, httponly=True, samesite="None")

2. 清理冗余的CORS配置

CORS_ORIGIN_ALLOW_ALL和CORS_ALLOWED_ORIGINS不能同时生效,保留明确的源列表更安全:

CORS_ORIGIN_ALLOW_ALL = False  # 关闭全局允许
CORS_ALLOWED_ORIGINS = ["http://192.168.10.101:8888", "http://localhost:8888", "http://127.0.0.1:8888"]

3. 前端开启跨域携带Cookie

Vue2项目中,确保请求库(比如axios)开启withCredentials:

// 全局配置
axios.defaults.withCredentials = true;

// 或者单个请求配置
axios.post('/login', 你的请求数据, { withCredentials: true })

验证方法

  1. 重启Django后端
  2. 登录后查看浏览器控制台,确认无Cookie拦截错误
  3. 检查浏览器Cookie存储,确认sessionid已保存
  4. 发起后续请求,查看请求头是否携带Cookie: sessionid=xxx

内容的提问来源于stack exchange,提问作者Sean Hsieh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:45:54