TP8.0 基于 JWT 实现单设备登录挤下线功能【单点登录】
作者:SoftHope
时间:2026-07-11
来源:互联网
浏览:0
在ThinkPHP8.0中,通过Redis存储用户版本号实现JWT单设备登录强制挤下线机制。每次登录时递增版本号并写入JWT令牌,中间件校验版本一致性,若不一致则返回401状态码。登出或后台踢人时删除Redis键值,从而确保旧会话立即失效。
在ThinkPHP 8.0中实现单设备登录(也就是常说的“挤下线”),本质上是要让每一次新登录都能覆盖掉旧的会话,让前一个Token瞬间失效。这事儿听起来简单,但实际操作起来,你会发现JWT自带的exp字段根本指望不上——因为JWT本身是无状态的,它压根不主动管理会话的生命周期。TP8.0默认也没有内置黑名单或版本校验机制,所以关键环节得我们自己动手补上。

一、核心设计:用Redis存储Token版本号或jti黑名单
这里推荐使用“用户ID + 版本号”方案,兼顾性能和语义清晰度,具体做法如下:
- 用户每次成功登录时,生成一个递增的token_version(比如从数据库user表的
token_version字段读取并+1后更新)。 - 将该版本号写入Redis,key为
jwt:version:{user_id},值就是当前版本号。TTL建议设得比JWT过期时间稍长一点(比如JWT是2小时,Redis就设2小时10分钟)。 - JWT的payload中必须携带这个版本号(例如
"v": 123)。服务端验证时,先decode,再比对Redis中存储的版本是否一致。 - 不一致就直接返回401,并且在返回信息中明确区分是“被挤下线”还是“已过期”,这样前端才能给出友好的提示。
二、TP8.0中间件里完成校验逻辑
在自定义的鉴权中间件(比如app/middleware/CheckJwt.php)中,按以下步骤执行:
- 从请求头
Authorization: Bearer xxx提取Token。 - 用
think\facade\Jwt或第三方库(如firebase/php-jwt)进行decode,同时捕获签名错误、过期等异常。 - 提取payload中的
uid和v(版本号)。 - 查询Redis:
GET jwt:version:{uid}。如果不存在,或者值不等于v,直接中断请求,返回401 {"code":401,"msg":"账号已在其他设备登录"}。 - 校验通过后,将用户信息绑定到
think\facade\Request或上下文中,供后续控制器使用。
三、登录接口要原子化更新版本
在登录成功后,必须确保“读版本 → +1 → 写库 → 写Redis → 签发含新版本的JWT”这一串操作不被并发打断。具体来说:
- TP8.0可以用
Db::transaction()包裹用户表token_version的更新操作。 - Redis写入建议用
setex命令一次完成(避免先del再set带来的竞态问题)。 - JWT签发时,payload里显式传入刚更新的版本号,不要读缓存或临时变量。
- 可以额外记录登录IP、设备UA到日志,方便后续审计——谁挤掉了谁,一目了然。
四、登出与强制下线的配合
单设备登录不只是管登录,还要支持主动退出和后台踢人。这里有几个关键点:
- 用户点击“退出登录”时,只需删掉Redis中对应的key:
DEL jwt:version:{uid}。下次任意请求都会因为版本不匹配而失败。 - 管理员后台“踢下线”同理,也是删Redis key;不需要操作数据库或扫描Token。
- 不建议用jti黑名单替代版本号——jti需要为每个Token单独存一条,Token一多,Redis内存压力就上来了,而且无法批量作废某个用户的所有会话。
作者最新文章
苹果折叠屏iPhone是翻盖还是对折形态
2026-09-14 13:33
PDF转Word的4种方法及结果核对步骤
2026-09-09 06:00
速腾聚创自研SPAD-SoC芯片交付破50万颗,MARS基地实现8秒下线一台激光雷达
2026-09-08 17:42
TECNO Camon Slim 5G发布:6.39mm机身与6000mAh电池规格解析
2026-09-08 17:04
小米 18 Fold 暖金白图赏:中折叠形态与核心规格解析
2026-09-08 16:50
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















