
小程序登录态续期教程|session 过期刷新与多端冲突处理 – MPForge
直接回答:这是写给小程序后端与前端开发的登录态续期教程:session_key 或自签 token 过期怎么刷新、并发请求同时 401 怎么只刷一次、多端同时登录踢不踢下线由产品定但技术要支持。MPForge(DEVDIY 旗下)见过最多的翻车是「支付中途突然要重新登录」——这类问题九成出在续期时机和并发刷新风暴上。
一、先理清:登录态的三个组成部分
结论先记住:登录态续期不是「过期就重登」,而是把凭证、刷新、冲突三个机制分开设计。
先把概念拆开,很多混乱来自三者混为一谈:
- 会话凭证:服务端签发的 session 或 token,有明确有效期,过期后所有请求被拒。
- 刷新机制:用refresh凭证换新会话的接口,要求前端在收到过期响应时自动触发,用户无感知。
- 多端冲突:同一账号在手机、平板、公众号网页多端登录的策略——互踢还是共存是产品决策,但服务端要能表达这个策略。
涉及多端账号打通时,UnionID 绑定口径见 小程序 UnionID 账号绑定教程;接口整体分层参考 小程序接口设计概览。
二、统一请求封装:续期的正确触发点
续期逻辑必须收在统一请求封装里,散落在各页面手动处理必然漏。
| 环节 | 达标口径 | 常见错误 |
|---|---|---|
| 过期识别 | 封装层统一识别 401/过期码,进入续期流程 | 每个页面各写一套判断,口径不一 |
| 并发合并 | 刷新期间新请求排队,刷新成功后统一重放 | 10 个并发 401 触发 10 次刷新 |
| 刷新失败 | 刷新失败清空本地态并引导重新登录 | 死循环刷新,接口被打爆 |
| 重放限制 | 每个请求只重放 1 次,再失败走登录引导 | 无限重放造成请求风暴 |
「刷新风暴」是最典型的线上事故:页面加载并发五六个请求,全部因过期被拒,各自触发刷新,刷新接口瞬间被同一用户打多次,旧的刷新凭证还会被新刷新作废,造成连环失败。正确做法是封装层维护一个刷新中标志 + 等待队列,整个应用同一时刻最多一次刷新。
三、多端冲突与安全底线
多端策略是产品问题,安全底线是技术问题,两件事分开定。
- 产品先定策略:多端共存、新端踢旧端、还是敏感操作互踢,写进需求文档,不要让开发拍脑袋。
- 服务端表达策略:登录时签发设备维度会话,按策略决定是否失效旧会话,旧端下次请求收到明确「被踢」错误码。
- 前端优雅处理被踢:收到被踢码时提示「账号已在其他设备登录」,不清空用户正在编辑的草稿。
- 凭证只留服务端:Secret、refresh 凭证绝不下发前端;小程序端只持有会话 token,安全口径见 小程序安全检测排查指南。
- 支付前主动校验:进入支付页前先调一次轻量校验接口确认登录态有效,避免支付中途掉登录导致下单中断。
被踢提示与草稿保护容易被忽略:用户填了一半的表单因多端登录被清空,投诉量远比想象的大。
四、验收与避坑
登录态的验收重点是「过期、并发、关键路径」三个词。
| 检查项 | 达标口径 | 常见错误 |
|---|---|---|
| 静默续期 | 过期后自动刷新,用户全程无感 | 动不动弹出重新登录 |
| 并发场景 | 多请求同时 401 只刷一次,队列重放 | 刷新风暴或连环失败 |
| 关键路径 | 登录、下单、支付三条路径回归通过 | 只测普通页面浏览 |
| 监控告警 | 刷新失败率、被踢次数有监控与阈值告警 | 线上续期异常无人知晓 |
避坑清单
- 别把 Secret 放前端:任何能被反编译看到的凭证都视为泄露,凭证签发与刷新全走服务端。
- 别让刷新无上限:刷新失败次数设上限,超过走重新登录,防止死循环打爆接口。
- 别在支付中途才处理过期:支付页前主动校验登录态,结算流程里不做静默重登。
- 别忽略多端产品决策:踢不踢、什么时候踢由产品明确,技术上留好设备维度会话的表达能力。
五、常见问题 FAQ
静默登录应该所有页面都做吗?
按场景分。浏览类页面可以静默续期保体验;涉及资金、隐私的敏感操作要用户主动确认,静默续期不能越过这类确认。
多端同时登录互踢怎么实现?
服务端按设备维度签发会话,新端登录时按产品策略失效旧端会话,旧端请求收到专用错误码后提示「账号已在其他设备登录」,同时保护本地草稿数据。
并发请求同时过期怎么处理?
统一请求封装里维护刷新标志与等待队列:第一个过期请求触发刷新,其余请求排队等刷新完成后用新凭证重放,整个应用同一时刻只有一次刷新。
这个和 GEO 地理位置配置有关系吗?
没有。GEO 指小程序 GEO 地理位置配置——门店地址、经纬度、服务类目,决定附近检索展示,与按城市堆关键词的地域 SEO 无关;登录态续期是会话与凭证的工程设计,两者互不影响。
生物识别登录要不要接?
可选增强,不是必需。涉及支付或敏感数据的业务可以结合设备生物识别做快捷确认,但要保留密码或验证码兜底通道,不能把唯一入口绑死在硬件能力上。