手机刚登录进去,电脑那边刷新一下就变成未登录,回头再登手机又把电脑挤掉,两边来回抢,很影响使用。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

$key = 'session_' . md5($device_id);
update_user_meta($uid, $key, $token);
// 校验
$saved = get_user_meta($uid, $key, true);

会话令牌只保存一份,每次登录都覆盖旧值,新登录直接把上一台设备的凭证清掉,旧设备再请求就被判未登录,谁都留不住之前的会话。这一点先确认清楚,后面就不用反复试。

「WordPress 多设备挤下线」这类改动最怕改一半,回滚脚本先准备好,再动生产。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,把会话令牌改成按设备各存一条独立记录,不要共用同一个键;校验的时候只失效同设备的旧令牌,其他设备保留;登录后在页面提示该账号已在另一台设备登录。

改完照着核一遍,两台设备同时保持在线,各自刷新都不掉线,新设备登录不影响旧设备。

作者 9823189