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

Chrome浏览器下Django部署后登录跳转自动登出问题求助

排查方向
  • 检查 SESSION_COOKIE_SECURE:线上部署需设为 True,但前提是服务器已配置 HTTPS。如果未启用 HTTPS却开了这个选项,Chrome 会拒绝保存会话 Cookie,导致跳转后丢失登录状态。本地 HTTP 环境下该选项通常为 False,所以正常。
  • 核对 SESSION_COOKIE_DOMAIN:必须匹配服务器的实际域名(比如自定义域名或 Lightsail 提供的公网域名)。如果域名设置错误,Cookie 无法在跨请求时被携带,会话自然无法维持。
  • 调整 SESSION_COOKIE_SAMESITE:建议设为 'Lax'(默认值),若设为 'Strict',跳转场景下 Chrome 可能不会发送 Cookie;如果涉及跨域场景,可尝试设为 'None'(同时需开启 SESSION_COOKIE_SECURE=True)。

2. Nginx 反向代理配置缺失关键请求头

确保 Nginx 配置中包含以下代理头,否则 Django 无法正确识别请求环境,导致会话处理异常:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
  • 重点关注 X-Forwarded-Proto:如果服务器用 HTTPS,这个头会告诉 Django 请求是通过 HTTPS 发起的,确保 SESSION_COOKIE_SECURE=True 时 Cookie 能正常发送。

3. Django 中间件顺序错误

确认 settings.py 中中间件顺序:SessionMiddleware 必须在 AuthenticationMiddleware 之前,否则请求到达时还未加载会话数据,request.user 会直接返回 None。正确顺序示例:

MIDDLEWARE = [
    # ...其他中间件
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # ...其他中间件
]

4. 会话存储后端问题

如果使用本地缓存(如 django.contrib.sessions.backends.cache 且配置为本地内存缓存),Gunicorn 多 worker 进程之间无法共享会话数据,登录状态仅在当前 worker 进程有效,跳转后请求落到其他 worker 就会丢失状态。建议:

  • 改用数据库存储会话(默认的 django.contrib.sessions.backends.db);
  • 配置 Redis/Memcached 等分布式缓存作为会话存储后端。

5. Chrome 浏览器本地因素

  • 用 Chrome 隐私窗口测试,排除浏览器扩展(如广告拦截、隐私插件)阻止 Cookie 保存的可能;
  • 清除浏览器缓存和 Cookie 后重新测试,避免旧的无效 Cookie 干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:35:56