两个混用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
相关产品推荐
相关产品推荐

