登录页勾了记住我,关掉浏览器再打开还是要输密码,同一台机器不关浏览器刷新却一直是登录状态。换到无痕窗口反而能记住。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,前端把续期令牌存进了 sessionStorage,它的生命周期只跟当前标签页走,标签页一关就清空。服务端发的 cookie 又是会话级,浏览器退出时一起被回收。
「记住我 sessionStorage」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
setcookie('remember', $token, [
'expires' => time() + 30 * 86400,
'path' => '/', 'httponly' => true, 'samesite' => 'Lax',
]);
具体做法是,把长期令牌换成带过期时间的 httpOnly Cookie,别放在 sessionStorage;Cookie 的 Max-Age 按记住我的天数设,路径限制在登录相关接口;服务端校验时区分会话 cookie 和持久 cookie,别都按两小时算;关掉整个浏览器再打开测一遍,只刷新页面测不出这个问题。
最后用这个标准收尾,关掉浏览器重新打开,首页仍是登录态,用户中心能直接进。
