Chrome浏览器下Django部署后登录跳转自动登出问题求助
排查方向
1. Cookie 策略与 Django 配置不匹配(Chrome 对 Cookie 限制更严格)
- 检查
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
相关产品推荐
相关产品推荐

