必须将session.save_handler设为redis且session.save_path带tcp://前缀和可连地址,否则php会静默回退到文件存储导致登录后刷新即登出;redis有密码时需在save_path中用auth参数指定,如tcp://127.0.0.1:6379?auth=your_password。

session.save_handler 必须设为 redis,且 session.save_path 要带协议和可连接地址,否则 PHP 会无声 fallback 到文件存储——这是登录后刷新即登出的最常见原因。
php.ini 中配置 session 使用 Redis
直接改全局配置最稳妥,但需重启 PHP 进程(如 php-fpm):
-
session.save_handler = redis—— 不写这行,后面全白搭 -
session.save_path = "tcp://127.0.0.1:6379"—— 必须带tcp://前缀,IP 和端口要能通(用telnet 127.0.0.1 6379验证) - 如果 Redis 设了密码:
session.save_path = "tcp://127.0.0.1:6379?auth=your_password";Redis ≥6.0 启用 ACL 时,确认用户有+@all权限 - 若 Redis 配置了
bind 127.0.0.1且 PHP 在远程服务器跑,必须改成bind 0.0.0.0并关掉protected-mode yes,否则连不上
运行时用 ini_set() 动态设置
适合不能改 php.ini 的共享主机或容器场景,但必须在 session_start() 之前调用:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
ini_set('session.save_handler', 'redis');ini_set('session.save_path', 'tcp://127.0.0.1:6379');- 密码写法同上:
ini_set('session.save_path', 'tcp://127.0.0.1:6379?auth=xxx'); - ⚠️ 注意:PHP 8.0+ 默认禁用
session.auto_start,所以务必手动调用session_start(),且不能在输出任何内容(包括空格、BOM)之后再调用
验证 Redis 是否真在存 session
别信 session_start() 没报错就等于成功。Redis 连接失败时,PHP 会静默退回到 files 驱动,现象是“看起来能登录,但一刷新 session 就丢”:
- 先确认 Redis 正在运行:
redis-cli ping返回PONG - 手动触发一次 session 写入:
$_SESSION['test'] = time(); session_start();,然后立即查 Redis:redis-cli keys "PHPSESSID_*"—— 如果没结果,说明没走 Redis - 检查
phpinfo()页面里session.save_handler和session.save_path的值是否和你设的一致(注意空格、引号、协议头) - 错误日志里搜
Failed to write session data或Connection refused,这类提示往往只在首次连接失败时出现
ThinkPHP 8.0 的 session 配置不复用 cache 配置
TP8 的 config/session.php 和 config/cache.php 是两套独立配置,不能指望改完 cache 就自动生效于 session:
- 必须在
config/session.php中显式写:'type' => 'redis'+'store' => ['host' => '127.0.0.1', 'port' => 6379, 'database' => 1, 'auth' => 'xxx'] -
'database' => 1强烈建议和 cache 分开(比如 cache 用 0,session 用 1),比加 prefix 更可靠 - 漏掉
'store'数组会直接报错:Call to a member function setOptions() on null - 务必禁用 PHP 原生 GC:
ini_set('session.gc_probability', 0),否则 Redis 里的 session key 可能被误删
redis-cli keys "PHPSESSID_*" 这条命令,比所有日志都管用。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










