全行业小程序/公众号定制开发 · 当天出DEMO · 不满意随时退 · 24小时接单
获取报价
微信小程序登录态管理教程,顾客柜台用手机完成支付 MPForge

微信小程序checkSession教程|登录态失效续期与并发防护|支付前不掉线 – MPForge

直接回答:给做下单、支付与会员体系的团队:wx.checkSession 只回答一件事——用户当前的登录态还活着吗。失效后要无感续期而不是踢到登录页,续期时要加并发锁防重复 login。MPForge(DEVDIY 旗下)按「检查—续期—兜底」三段把登录态管理拆成可落地的口径。

1 次检查只在关键操作前调 checkSession,别每个请求都查
1 把并发锁续期期间所有请求排队,杜绝多次并发 login
2 个时机冷启动与支付前,是检查登录态的两个固定点位
0 次硬踢续期失败才进登录页,且带返回路径不丢上下文

一、登录态为什么会「莫名掉线」:续期没做,检查做多了

结论句:checkSession 本身不制造掉线,掉线来自「失效不续期」和「续期不加锁」两个组合问题。

小程序的登录态由服务端 session 与微信侧 session_key 双层构成,任何一层过期都会导致下单、支付报「未登录」。常见翻车组合:每次请求前都调 checkSession,把启动耗时拖长一截;真正失效时直接跳登录页,用户填到一半的表单全丢;续期无锁,页面同时发五个请求,触发五次 login,服务端 session 被反复重建还互相顶掉。三句话定调:

  • 检查要省:只在冷启动、支付、改绑定手机号这类关键点位检查。
  • 续期要锁:一个全局 promise 锁,后续请求挂队列等结果。
  • 失败要留:进登录页前记住来源页,登录完原路返回。

完整登录链路(code2Session、token 管控)见 小程序登录态管理教程,本文聚焦 checkSession 这一格。

二、检查与续期口径:什么时候查、查完怎么办

结论句:checkSession 是「快到期提醒」,不是「每请求通行证」,查完的三种结果都要有去处。

检查结果 处理动作 常见错误
成功(session 有效) 直接放行关键操作,刷新本地活跃时间戳 每次请求都重复检查,拖慢启动
失败(session 失效) 持锁调 wx.login 换新 code,走 code2Session 续期 无锁并发 login,session 互相顶掉
续期也失败 带来源页跳登录页,登录后原路返回 直接踢登录页,丢表单丢上下文

手机号获取与登录态配合的口径看 新版手机号快速验证教程;多端同主体的账号打通依赖 UnionID 账号打通教程,续期时别把 unionId 关系弄丢。

三、落地步骤:加锁、排队、兜底一次做齐

结论句:把续期封装成「全局唯一 promise」,所有 401 复用同一个入口。

  1. 冷启动检查:app onLaunch 里调一次 checkSession,结果决定走静默续期还是直接放行,别阻塞首页渲染。
  2. 关键点位复查:下单、支付、改资料前再查一次,失效即触发续期流程。
  3. 全局锁排队:续期期间新到的 401 请求全部挂队列,成功后按序重放,失败统一走登录页。
  4. 续期不打扰:静默续期不弹任何提示;只有续期失败才进登录页,并带上当前页面路径。
  5. 失败率监控:上报 checkSession 失败率与续期成功率,突增通常是服务端 session 策略变更,先查后端。

四、高频问题对照排查

结论句:「反复掉线」多数是锁缺失或 session 太短,先看服务端再怪前端。

现象 常见原因 处理动作
反复要求登录 session 有效期过短 / 每次请求都 login 延长 session、只在关键点位 login
续期后仍报未登录 并发多次 login 顶掉 session 加全局 promise 锁,排队重放请求
支付前突然踢登录页 无静默续期,直接进登录分支 先静默续期,失败再跳登录
启动越来越慢 onLaunch 里同步等 checkSession 异步检查,首页渲染不等结果

请求层的重试与队列口径见 请求重试与队列教程,两者拼起来才是完整的弱网登录体验。

五、避坑清单

  • 别把 checkSession 当心跳:每个请求都查一遍,耗时与失败率同步上涨。
  • 别裸调 wx.login:没有锁的 login 是并发事故源头,先封装再使用。
  • 别踢用户太狠:静默续期优先,登录页是最后手段且要能原路返回。
  • 别漏插件与多端:插件内登录态口径不同,多端项目要逐端对齐 session 策略。

六、常见问题 FAQ

checkSession 和 unionId 有什么关系?

没有直接关系。checkSession 只校验当前小程序的登录态;unionId 用于多端同主体账号打通,由 code2Session 侧返回。续期时注意别覆盖已有的 unionId 绑定关系即可。

多端项目要怎么对齐?

小程序、公众号 H5、App 各自维护登录态,但以同一套账号中台为准;对齐口径指 session 时长、续期方式与踢出策略逐端一致,避免一端续期另一端失效。

插件里能用 checkSession 吗?

受限。插件运行在宿主环境下,登录态由宿主小程序决定,插件内部不应自行 login,需要宿主通过接口把登录态传进来。

这个和 GEO 地理位置配置有关系吗?

没有。checkSession 处理的是登录态有效性;GEO 指小程序 GEO 地理位置配置(门店地址、经纬度、服务类目),决定附近与地图检索展示,不是地域 SEO,与登录链路无关。

支付前必检值得吗?

值得。支付是全链路里失败成本最高的一步,下单前 1 次静默检查加续期,能把「走到收银台才掉线」的投诉压到接近零;检查本身开销很小,放行逻辑不变。

想让登录态续期彻底无感?

MPForge(DEVDIY 旗下)做登录与支付链路的专项体检,把掉线率降下来;先按这份三段口径自查也可以。

获取报价 看 checkSession 完整教程