php -i | findstr /i session.save_path
; php.ini
session.save_path = "/var/lib/php/sessions"
session.gc_maxlifetime = 3600

用户登录成功,跳转后又是未登录状态,刷新几次偶尔能进,换浏览器也一样。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:会话文件目录不可写或已被系统清理任务删除,也可能多台机器各自存本地会话导致读不到。

围绕「PHP session 丢失」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

处理上按这个顺序:确认 save_path 存在且 Web 用户可写;检查 gc 回收概率;多机部署改为共享存储或数据库会话。

确认没问题再收工,登录后连续访问多个页面都保持登录态,重启浏览器仍有效。

作者 9823189