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

两个混用JWT与会话认证的Django项目会话持久化异常求助

背景

项目A

  • 遗留系统
  • 基于模板语言的Django全栈服务器
  • 采用会话认证
  • Python版本3.8
  • Django版本3.2

项目B

  • 新项目
  • 基于JSON的Django RESTful API服务器
  • 同时采用JWT与会话认证
  • Python版本3.11
  • Django版本5.0
  • 数据库:MariaDB

目前正从遗留项目A迁移到项目B,迁移过程中已切换至JWT认证,但因遗留系统未完全迁移,仍保留会话认证方式。两个项目均使用UserenaAuthenticationBackend,通过django.contrib.auth.authenticate和django.contrib.auth.login实现登录。

在此状态下,用户可通过项目A或B登录(二者共用同一数据库),出现以下问题:

现状
  • 在浏览器1登录A → 在浏览器2登录B → 浏览器1中的A自动登出
  • 在浏览器1登录B → 在浏览器2登录A → 浏览器1中的B自动登出
  • 在浏览器1登录A → 在浏览器2登录A → 浏览器1中的A保持登录状态
  • 在浏览器1登录B → 在浏览器2登录B → 浏览器1中的B保持登录状态
目标

无论用户从不同项目或浏览器登录,均能保持多会话在线状态。

怀疑点

  • 已统一SESSION_COOKIE_NAME的名称值。
  • 曾怀疑是版本差异导致,但除Django 4.0中session.encode格式变更(默认算法改为SHA1)外无重大变化,且两个项目均使用SHA256,故排除该因素。
  • 数据库中的会话未过期,每个浏览器都会创建会话,但再次登录时仅覆盖对应浏览器的会话,未使其他会话过期(过期时间未变)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:20:59