thinkphp 5.1.41 分布式 session 启用需严格校验:先确认 php -m | grep redis(≥4.3.0)或 memcached(ext-memcached ≥3.0.0),再修改 config/session.php 中 type 为小写 'redis' 或 'memcached',显式配置 expire、serialize、cookie.domain 及对应连接参数,否则静默回退文件存储。

ThinkPHP 5.1.41 安装完成后,会话(Session)默认使用文件驱动,若需启用分布式存储(如 Redis 或 Memcached),必须手动修改配置文件并确保环境就绪。关键不是“装完就能用”,而是配对、校验、不遗漏。
确认 PHP 环境已支持目标驱动
先检查扩展是否加载成功,否则配置再对也静默失败:
- Redis:运行
php -m | grep redis,有输出且版本 ≥ 4.3.0(推荐);若用密码含@或/,后续需 URL 编码 - Memcached:运行
php -m | grep memcached,必须是 ext-memcached(≥3.0.0),不是 ext-memcache;Windows 下确认启用的是php_memcached.dll - Docker 用户注意 Alpine 镜像需额外安装
php82-pecl-memcached类似包
修改 config/session.php 配置项
该文件是唯一生效位置,不是 .env,也不是 php.ini。核心字段必须全小写、格式严格:
-
type:必须为
'redis'或'memcached'(大小写敏感,Redis、memcache、MEMCACHED全部无效) -
auto_start:设为
true,否则 Session 不自动初始化 -
expire:显式设置过期时间(单位秒),例如
7200,避免依赖服务端默认 TTL -
serialize:设为
'php',保证与 PHP 原生序列化兼容(尤其 Redis 场景,防登录态丢失) -
cookie.domain:多子域名共享时必须设为
'.example.com'(开头带点)
按驱动补全对应连接配置
配置不是孤立的,需联动 cache.php 或服务器列表:
-
Redis 驱动:
store指向cache.php中定义的 Redis 连接名(默认'redis'),确保cache.php的stores.redis包含正确host、port、password(特殊字符需编码)、database -
Memcached 驱动:
memcached字段必须是纯数字索引数组,例如:'memcached' => [['host' => '127.0.0.1', 'port' => 11211]]
❌ 不接受关联键名(如['server1' => [...]])、字符串地址(如'127.0.0.1:11211')
验证是否真正生效
别只看配置写了没,要验证是否真的用了目标驱动:
- 在控制器中加
dump(session_id(), session_get_cookie_params());,访问页面查看输出 - 登录后故意切换服务器(如负载均衡下刷新多次),观察登录态是否持续
- 查 Redis 或 Memcached 服务端:执行
redis-cli keys 'thinkphp_session_*'或echo "stats" | nc 127.0.0.1 11211 | grep curr_items,确认 key 已写入 - 最直接方式:临时把
type改错(如'Redis'),再访问——如果仍能登录,说明它已静默回退到文件驱动,配置未生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











