共享主机PHP会话存Redis失败:独立用户配置后无数据写入
问题排查与解决
1. 会话提前关闭导致数据未写入
你的PHP脚本中使用了session_start(['read_and_close' => true]),该选项会在读取会话数据后立即关闭会话连接,后续对$_SESSION的修改无法被写入Redis——因为会话已经关闭,PHP不会触发写入操作。
解决方法:移除read_and_close参数,或在修改$_SESSION后手动调用session_write_close()触发写入:
<?php ini_set('display_errors', 1); session_start(); $_SESSION['hello'] = 'world'; session_write_close(); // 手动执行会话写入 echo $_SESSION['hello']; die();
2. Redis认证密码不匹配
Redis用户web1的配置密码是hello(对应配置行>hello),但PHP-FPM配置中写的是auth[password]=web1,密码不一致会导致PHP无法成功向Redis写入数据(你用redis-cli测试正常是因为使用了正确密码)。
修改/etc/php/8.1/fpm/pool.d/web1.conf中的密码配置:
php_value[session.save_path] = "tcp://127.0.0.1:6379?auth[username]=web1&auth[password]=hello&prefix=web1_PHPREDIS_SESSION:"
验证步骤
修改完成后执行以下操作确认:
- 重启PHP-FPM服务:
systemctl restart php8.1-fpm - 重启Redis服务:
systemctl restart redis-server - 访问
test.php后,用redis-cli登录web1用户,执行KEYS web1*查看是否生成会话Key
内容的提问来源于stack exchange,提问作者martin
相关产品推荐
相关产品推荐

