ThinkPHP会话失效?如何排查与修复?教程分享!
- 内容介绍
- 文章标签
- 相关推荐
本文共计872个文字,预计阅读时间需要4分钟。
ThinkPHP中Session失效通常不是随机发生的,绝大多数情况是配置缺失或冲突导致的。升级到TP6后,`session.driver`不再有默认值,空配置等同于不启用。
TP6 必须显式配置 session.driver
TP6 的 SessionManager 在 driver 为空时直接跳过初始化,你调用 session('user') 或读写 $_SESSION 全部静默失败,且不报错。
- 检查
config/session.php,确认存在'driver' => 'file'(或'redis'、'database') - 若使用
.env,确保含SESSION_DRIVER=file,且config/session.php中通过Env::get('session.driver')正确读取 - 别依赖“没配就用 file”的旧习惯——TP5 可以,TP6 不行
Redis 驱动下 session.prefix 为空引发跨项目覆盖
多个 TP 应用共用一个 Redis 实例(尤其线上只开 database 0),若都用空 prefix,所有项目的 session key 全挤在 PHPREDIS_SESSION:xxx 下,A 登录后 B 刷新页面直接登出,或看到 A 的用户信息。
本文共计872个文字,预计阅读时间需要4分钟。
ThinkPHP中Session失效通常不是随机发生的,绝大多数情况是配置缺失或冲突导致的。升级到TP6后,`session.driver`不再有默认值,空配置等同于不启用。
TP6 必须显式配置 session.driver
TP6 的 SessionManager 在 driver 为空时直接跳过初始化,你调用 session('user') 或读写 $_SESSION 全部静默失败,且不报错。
- 检查
config/session.php,确认存在'driver' => 'file'(或'redis'、'database') - 若使用
.env,确保含SESSION_DRIVER=file,且config/session.php中通过Env::get('session.driver')正确读取 - 别依赖“没配就用 file”的旧习惯——TP5 可以,TP6 不行
Redis 驱动下 session.prefix 为空引发跨项目覆盖
多个 TP 应用共用一个 Redis 实例(尤其线上只开 database 0),若都用空 prefix,所有项目的 session key 全挤在 PHPREDIS_SESSION:xxx 下,A 登录后 B 刷新页面直接登出,或看到 A 的用户信息。

