ThinkPHP5.1的Session配置必须在config/session.php中定义,需严格包含type、auto_start、prefix三项,按驱动补充参数,并设置expire、serialize、cookie_domain等关键安全项以确保生效。

ThinkPHP5.1 的 Session 配置统一放在 config/session.php 文件中,不能写在 .env 或其他配置文件里。该文件返回一个关联数组,所有选项都需按框架约定填写,大小写、字段名、结构稍有偏差就会静默失效(比如回退到 file 驱动)。
基础结构与必填项
标准 session.php 至少要包含以下三项:
-
type:驱动类型,必须为全小写字符串,如
'file'、'redis'、'memcached'(注意不是Memcache或Redis) -
auto_start:是否自动开启 Session,建议设为
true,否则需手动调用Session::init() -
prefix:Session 数据键名前缀,用于避免不同应用或模块间冲突,默认可设为
'think'
按驱动类型补充配置
不同驱动需额外提供对应参数,缺一不可:
审查 Remix v2 代码中的 v1 形态 meta 导出(v2 中为破坏性变更),cookie 安全漏洞(httpOnly、secure、密钥轮换),认证门位于错误层级,以及其他
-
文件驱动(file):无需额外字段,但确保
runtime/session/目录存在且 Web 进程可读写 -
Redis 驱动:补全
'host'、'port'、'password';如需指定 Redis 数据库编号,加'select' => 3(默认是 0) -
Memcached 驱动:服务器列表必须是纯数字索引数组,例如
[['host' => '127.0.0.1', 'port' => 11211]];不能用关联键名或字符串地址
关键安全与兼容参数
这些参数不填常导致“登录即掉线”或跨域失效:
立即学习“PHP免费学习笔记(深入)”;
-
expire:显式设置过期时间(单位秒),如
7200,避免依赖服务端默认 TTL -
serialize:设为
'php',保证与 PHP 原生序列化兼容,防止读取乱码 -
cookie_domain:跨子域名共享时必须设为
'.example.com'(开头带点) -
cookie_httponly 和 cookie_secure:建议启用,增强 Cookie 安全性(HTTPS 环境下
cookie_secure必须为true)
验证是否生效
配置完后,可在控制器中简单测试:
- 调用
Session::set('test', time())再Session::get('test'),看能否正确读出 - 检查响应头中
Set-Cookie是否含HttpOnly、Secure(HTTPS 下)、SameSite=Lax - 若用 Redis/Memcached,用命令行工具确认 key 是否真实写入,且值可反序列化


















