You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django会话配置24小时超时,部分Chrome浏览器10-15分钟失效求助

Django Session Authentication 异常超时(Chrome特定)排查方案

我之前也碰到过类似的Chrome浏览器下Django会话提前超时的问题,结合实战经验整理几个排查和解决的方向:

1. 先排查Chrome本地设置与扩展

Chrome的隐私相关设置或第三方扩展经常会干扰Cookie的正常持久化:

  • 检查Cookie自动清理规则:打开Chrome设置 → 隐私和安全 → Cookie和其他网站数据,确认没有开启「清除不常用网站的Cookie」,也没有把你的网站添加到「始终清除Cookie的网站」列表里。另外,不要勾选「将Cookie保留到您关闭浏览器为止」,这个会直接覆盖Django设置的过期时间。
  • 禁用第三方扩展:尤其是隐私保护类(比如Privacy Badger、uBlock Origin的高级Cookie规则)、Cookie管理类的扩展,这些工具可能会自动修改Cookie的过期属性。可以先禁用所有扩展,测试会话是否能正常保持24小时。

2. 确认Django的会话配置是否正确

检查settings.py里的会话相关设置,确保没有冲突或错误:

# settings.py 关键会话配置
SESSION_COOKIE_AGE = 86400  # 24小时,单位为秒,务必确认数值正确
SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 必须设为False,否则浏览器关闭就失效
SESSION_SAVE_EVERY_REQUEST = True  # 默认是True,每次请求会刷新会话过期时间
SESSION_COOKIE_SECURE = True  # 如果网站使用HTTPS,必须开启,否则Chrome可能限制Cookie
SESSION_COOKIE_SAMESITE = 'Lax'  # 避免Chrome的SameSite严格限制导致Cookie失效
SESSION_COOKIE_DOMAIN = 'your-domain.com'  # 确保域名设置正确,跨子域名的话要设为'.your-domain.com'

另外,检查项目中有没有视图函数手动修改会话过期时间,比如误写了request.session.set_expiry(900)(15分钟),这会直接覆盖全局配置。

3. 监控Cookie与服务器请求变化

用Chrome开发者工具(F12)追踪Cookie的变化:

  • 登录成功后,在「Application」标签→「Cookies」下找到sessionid,记录它的Expires/Max-Age时间。
  • 等待超时发生前,刷新这个面板,看Expires时间是否被修改。同时切换到「Network」标签,查看所有请求的响应头,有没有Set-Cookie字段意外修改了sessionid的过期时间——这可能是服务器端的某个视图或中间件触发的。

4. 检查服务器端会话存储

如果Django使用数据库或缓存存储会话,确认存储层没有额外的过期规则:

  • 数据库存储:默认Django的django-admin clearsessions命令会清理两周前的会话,不会影响24小时内的会话,但如果有自定义的会话清理脚本,要确认逻辑正确。
  • 缓存存储(如Redis):如果用Redis存会话,检查Redis的TTL设置是否与SESSION_COOKIE_AGE一致,避免缓存层提前删除会话数据。

5. 排除Chrome后台限制

Chrome对后台运行的网站有一些资源限制,可能影响会话持久化:

  • 确保网站没有被Chrome标记为「不常用网站」,可以把网站添加到Chrome的「已保存的网站」列表里。
  • 关闭Chrome的「省电模式」,该模式下会限制后台网站的Cookie更新。

如果以上方法都没解决,可以尝试在Chrome的无痕模式下测试,看是否是用户配置文件的问题——有时候Chrome的用户配置损坏也会导致Cookie异常。

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

火山引擎 最新活动