update_user_meta($uid, 'pass_version', time());
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->prefix}sessions WHERE user_id=%d AND token<>%s", $uid, $current
));
用户在电脑上改了密码,手机上照样能刷文章、下单,一点没受影响,直到手动退出才重新要密码。客服收到的反馈是密码改了但像没改。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,密码只更新了用户表,会话表里那几条记录还挂在原来的用户 ID 上,校验时只看会话有效不看密码版本。改密这个动作没有触发任何会话清理。
这次卡住的地方就在「改密会话未失效」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。
处理上按这个顺序:用户表加一列密码版本号,改密时自增;会话里存下登录时的版本号,每次校验比对,不一致就要求重登;改密成功后主动删掉除当前会话外的其他记录;在两台设备上分别登录,改密后看另一台是否被登出。
改完只确认一件事:改密后另一台设备下一次操作跳到登录页,当前这台不用重登。
