ThinkPHP 6.0 配置 Session 的核心是修改 config/session.php:设 'type' => 'redis','store' => 'redis',添加 'serialize' => 'php'(6.0.10+),并确保 config/cache.php 中 redis 连接配置正确(host/port/password/database),密码含特殊字符需 URL 编码。

在 ThinkPHP 6.0 中配置 Session,核心是修改 config/session.php 文件,并确保底层存储(如 Redis 或文件)已就绪。不需要写新驱动类,框架已内置支持。
基础配置:启用 Session 中间件与驱动类型
Session 功能默认由中间件控制,需确认 app/middleware.php 中已启用:
-
\think\middleware\SessionInit::class必须存在(6.0 默认已包含) - 若手动移除过,请加回,否则 Session 不会自动初始化
然后打开 config/session.php,关键项如下:
-
'type' => 'file':默认使用文件存储;改为'redis'启用 Redis -
'store' => 'redis':当 type 为cache或redis时,指定缓存连接名(对应config/cache.php中stores.redis的键名) -
'expire' => 1440:单位为秒,建议设为正整数(如 7200 表示 2 小时) -
'name' => 'PHPSESSID':可自定义 Cookie 名,多子域名共享时需配合'domain' => '.example.com'(该参数需在cookie.php中设置)
使用 Redis 存储 Session(推荐生产环境)
确保 config/cache.php 中的 stores.redis 配置完整且可用:
审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他
-
'host' => '127.0.0.1'(或'unix:///var/run/redis.sock'用于 Unix socket) -
'port' => 6379(socket 连接时此项可省略) -
'password' => 'your_pass':含@、/等特殊字符时,必须 URL 编码(如pass@123→pass%40123) -
'database' => 0:Redis 数据库编号
回到 session.php,补充关键兼容项(尤其重要):
-
'serialize' => 'php':强制使用 PHP 原生序列化,避免与 Redis 扩展默认的 igbinary 冲突(仅 TP 6.0.10+ 支持) - 若版本低于 6.0.10,需手动重写
think\session\driver\Redis的read()和write()方法,显式调用unserialize()/serialize()
验证与常见问题排查
配置完成后,可通过以下方式快速验证是否生效:
- 控制器中执行
Session::set('test', 'ok');,再用Session::get('test')读取,有返回即说明写入成功 - 登录态丢失?检查 Redis 是否连通(
telnet 127.0.0.1 6379)、密码是否 URL 编码、serialize是否统一 - Session ID 不变但数据为空?大概率是序列化不一致或 Redis 数据被其他应用清空
- 本地开发用 Unix socket 却报连接失败?确认
host值为'unix:///path/to/redis.sock',且 PHP 进程有 socket 文件读取权限
不复杂但容易忽略细节,重点盯住 type、store、serialize 和 Redis 连接参数四点,基本就能稳定运行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










