报错是这么冒出来的。两台应用服务器理论上已经共用会话,实际用户登录后换个节点就掉线,检查发现会话文件只存在本机磁盘上,没有被共享。

真正麻烦的地方在于,几个原因的现象几乎一样。会话驱动仍然是本地文件。还有一种是两台机器的会话目录路径不一致。

不容易想到的是,改了配置文件但没有重载进程。

动手时先看会话实际存储方式

php -i | grep -i 'session.save_handler'

接着改为共享缓存存储

grep -n session.save_handler /etc/php.ini

然后确认会话键在各机都能读到

redis-cli -h 缓存地址 keys 'PHPREDIS*' | head

末了重载进程并验证登录

systemctl reload php-fpm && curl -I https://域名

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

怎么算真的好了,看的是同一批现象。任意节点登录后切换请求都不掉线,会话键在共享存储里能看到。

容易忽略的是,改完配置文件必须重载进程,只改文件不生效;两台机器的会话前缀不一致,也会导致读到的是空会话。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189