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

部署在Heroku上的Django站点登录异常:闲置后无法用原凭据登录

问题排查与解决建议

针对你遇到的Django项目在测试环境中,电脑睡眠或长时间未操作后无法用原凭据登录的问题,给你几个实际排查方向:

  • 检查会话Cookie相关配置
    打开项目的settings.py,确认以下关键参数:

    • SESSION_COOKIE_AGE:默认是1209600秒(2周),如果被改成极短数值,会导致会话快速过期;
    • SESSION_COOKIE_SECURE:测试环境如果用HTTP协议,这个参数必须设为False,否则浏览器不会保存会话Cookie;
    • SESSION_EXPIRE_AT_BROWSER_CLOSE:如果设为True,浏览器睡眠唤醒后可能触发隐式会话清除,导致需要重新验证。
      推荐测试环境配置示例:
    SESSION_COOKIE_AGE = 1209600  # 保持默认2周有效期
    SESSION_COOKIE_SECURE = False  # HTTP环境下关闭强制HTTPS Cookie
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False
    
  • 排查会话存储后端
    之前Heroku部署时大概率用了数据库或Redis这类持久化会话存储,现在测试环境如果用了内存缓存(LocMemCache),服务器进程重启或回收会直接丢失会话数据:

    • 如果用数据库存储会话,确保django.contrib.sessions在INSTALLED_APPS中,并且执行过python manage.py migrate;
    • 测试环境尽量避免用django.contrib.sessions.backends.cache,除非配置了Redis这类持久化缓存服务。
  • 验证浏览器Cookie状态
    登录后打开浏览器开发者工具(F12),切换到Application标签,查看Cookie列表里的sessionid和csrftoken是否存在。电脑睡眠唤醒后再检查这两个Cookie:

    • 如果Cookie消失,可能是浏览器隐私设置(比如“关闭窗口时清除Cookie”)导致,调整设置后再测试;
    • 如果Cookie存在但登录失败,检查Cookie的Expires/Max-Age字段,确认是否提前过期。
  • 检查CSRF令牌有效性
    长时间未操作后CSRF令牌可能过期,导致登录表单提交失败:

    • 确认登录模板里正确添加了{% csrf_token %};
    • 检查settings.py中CSRF_COOKIE_AGE是否被修改为过短时间(默认约1年)。
  • 测试环境服务器的问题
    如果用python manage.py runserver作为测试服务器,自动重载功能(修改代码后重启服务器)会清空内存中的会话数据。可以尝试关闭自动重载(python manage.py runserver --noreload)测试,或者改用持久化会话存储后端。

内容的提问来源于stack exchange,提问作者bogdan-cmd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:49