用户从APP切到小程序或反过来,登录态掉线,通常不是单一端的问题,而是某一端根本没有能力拿到同一个身份。排查前先确认一件事:两个入口是否已经能把用户识别为同一个人。若身份标识本身就没对齐,后面任何续期、免登设计都会失效。
如果尚未梳理过整体交付流程,可以先参考服务范围与交付流程中从需求调研到运维交接的划分方式,把身份问题放在哪一层会更清晰。下面按场景给出三种常见方案,以及各自该在什么时候避开。
方案一:以手机号或自有账号做账号绑定,把两端身份拉平
这是最直接的做法:用户在一个入口注册后,通过手机号验证或内部账号体系,把小程序的开放身份与APP的账号记录关联起来,两端各自登录后落到同一个业务用户ID上。
- 优点:改造成本相对低,不需要额外部署统一认证服务;对已有会员体系的系统容易接入;问题定位路径短,绑定关系存在业务库里就能查。
- 缺点:绑定环节本身会带来一次引导损耗,用户拒绝绑定时两端仍是两个账号;换手机号、账号合并要单独做规则;多端并发时仍可能出现同一用户两套会话。
- 适用边界:入口不多、业务以内容或轻交易为主,账号体系本身已经以手机号为主键。
验收看点:绑定关系是否有唯一约束、解绑与换号是否有明确流程、绑定失败时是否有兜底提示。我们做过的互联网与软件行业案例中,这类基于手机号的账号拉平是比较常见的第一步。
方案二:建统一认证中心,两端都向它换令牌
两端都不再自己签发登录态,而是由一个统一的认证服务发放令牌,APP、小程序、Web端只是不同形态的客户端。会话的有效、续期、注销都由这一处决定。
- 优点:登录态唯一,不会出现两端状态各自漂移;后续接企业微信、公众号等其他入口时扩展性好;权限与注销逻辑集中,止血更快。
- 缺点:需要引入或自建认证服务,两端都要改登录链路,联调周期更长;令牌跨域、跨端的携带规则需要先定清楚,否则会把问题从前端挪到网关。
- 适用边界:入口持续增加、内部系统需要互通,或者政企客户对统一身份有明确要求。
判断标准很简单:如果未来还要接入第三个、第四个客户端,集中化通常比在每端补丁更划算。这类工作与软件定制开发与系统集成服务常放在一起做,因为认证改造会牵动网关与业务系统的边界。
方案三:共享会话存储,两端读写同一份会话数据
在两端各自的登录逻辑之上,把会话统一放到某一处共享存储里,两端按同一个会话键读写。改动看起来小,实际最考验细节。
- 优点:对业务代码侵入少,读会话仍是原来的方式;若已有成熟会话中间件,复用成本低。
- 缺点:会话的过期、刷新、注销要各处一致,任何一端漏了就会留下“看起来还登录着”的脏状态;并发请求下的刷新顺序容易互相覆盖;排查时看不出一致性维护漏在哪一端。
- 适用边界:两端同属一个后端体系、会话生命周期短且规则单一。
共享存储的关键验收点是刷新策略必须单一:是否允许并发刷新、刷新失败时旧令牌是否仍有短暂宽限,这些要先写清楚再动手改。
排查方向归纳起来只有几条线索,列出来便于自查:
- 先确认两端拿到的用户标识是不是同一个,不是就先解决身份对齐;
- 再看令牌有效期、刷新时机与刷新失败的表现是否两端一致;
- 最后核对注销、换号、退出登录是否两端都真正同步。
什么情况下不要选这些方案
有些前提下,上述方案不是选型问题,而是前提没成立,硬上一律会返工:
- 不要直接上统一认证中心,如果账号体系里本来就存在重复用户、一人多号的问题,那会先把脏数据固化成认证服务的一部分;应先做账号合并。
- 不要依赖共享会话存储,如果两端背后其实是两套独立后端、上线节奏不同步,任何一端改缓存格式就会互相影响。
- 不要把账号绑定当成终点,如果用户主要在其中一端使用、另一端只做拉新,让用户两次确认登录就能解决时,强行做绑定反而是负担。
另外,如果失效现象只出现在弱网、切后台或内存回收之后,多半不是身份策略问题,排查的重点应回到令牌续期与并发请求上。
方案对比清单与决策建议
把三种方案放到同一行来比较,决策会清楚很多:
- 账号绑定拉平 → 适合谁:入口少、账号以手机号为主键、已有会员体系的业务;主要代价:绑定引导损耗、解绑换号需单独维护规则。
- 统一认证中心 → 适合谁:入口持续增加、内部系统要互通、有统一身份要求;主要代价:改造范围大、两端登录链路需重写、联调周期长。
- 共享会话存储 → 适合谁:两端同属一个后端体系、会话规则简单;主要代价:过期与刷新策略需强迫一致,脏状态不易发现。
通常的建议顺序是:先做身份对齐,再决定是否集中化。上线前按下面几条验收:两端切换后用户标识一致;注销在一端生效后另一端能感知;令牌刷新规则有唯一说明文档;异常场景有可查的日志记录;切换入口的路径有回归用例覆盖。
若同时涉及微信生态的公众号、企业微信,身份对齐的工作量会明显上升,可参考同类项目案例中多入口并存时的处理思路,也可直接联系我们沟通具体场景。
常见问题
切换后必须重新登录,是不是令牌过期设得太短?
不一定。先确认两端拿到的是同一个业务用户ID;如果身份本来就不一致,延长有效期只会让错误状态留存更久。
只在一个端做续期可以吗?
不建议。续期只有一处执行、另一处不知道,会话状态就会分叉。要么集中处理,要么两端明确各自刷新时机并共用规则。
失效问题反复出现,从哪一层开始改成本最低?
一般先做数据核对:把两端登录后的用户标识与令牌签发时间放进同一份日志对照,问题出在绑定、签发还是刷新,一轮对比基本能定位。