ThinkPHP 6 的 session 配置文件默认在 config/session.php;必须显式配置 'type' => 'redis',严格匹配 Redis 参数,注意 cookie domain 和 secure 设置,Redis 连接失败会抛异常而非降级。

ThinkPHP 6 的 session 配置文件在哪?
默认在 config/session.php,不是 app/config.php 或中间件配置里。改错地方会导致 session 看似没生效,其实压根没加载你的配置。
关键点:TP6 使用 think-swoole 或 php-fpm 模式下,session 驱动必须显式指定为 redis,不能依赖自动探测。
-
'type' => 'redis'必须写死,别用'type' => env('SESSION_TYPE', 'file')这类兜底逻辑(环境变量容易漏配) -
'host'、'port'、'password'要和你 Redis 实例实际参数严格一致;密码为空时得写'',不能留 null 或省略 -
'expire'单位是秒,设成3600表示 1 小时,不是分钟 —— 这个单位错误是 session “莫名短命” 的最常见原因
Redis 存 session 时 key 长什么样?怎么验证是否真存进去了?
ThinkPHP 默认用 PHPREDIS 扩展时,session key 是 think:session:{session_id} 格式(注意前缀 think:session:)。不确认是否写入,就别猜,直接上 redis-cli 查:
redis-cli -h 127.0.0.1 -p 6379 KEYS "think:session:*"
如果返回空,说明 session 根本没存进去;如果返回一堆 key,再用 GET think:session:abc123... 看内容是否含用户登录态字段(比如 "user_id":123)。
使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能
- Redis 没启用
save或 AOF 时,重启会丢数据,但 session 失效通常不是因为这个,而是 PHP 进程没读到 key - 如果用的是阿里云/腾讯云 Redis,确认白名单已加服务器 IP,且安全组放行对应端口
- 某些 Redis 代理(如 twemproxy)不支持
KEYS命令,换用SCAN:redis-cli SCAN 0 MATCH "think:session:*" COUNT 100
为什么本地能用,一上服务器就失效?
核心差异往往在 session.cookie_domain 和 session.cookie_secure。服务器启了 HTTPS 但没配 'secure' => true,或域名带 www 但 cookie domain 写成 'example.com'(缺 . 前缀),浏览器直接拒收 cookie。
-
'domain' => '.example.com'(注意开头的点)才能让 www.example.com 和 api.example.com 共享 session -
'secure' => true仅当全站走 HTTPS 时开启;否则浏览器不传 cookie,后端收不到PHPSESSID -
'httponly' => true是安全建议,但不影响功能;关掉它也无法解决失效问题 - 检查 Nginx/Apache 是否拦截了
Cookie或Set-Cookie头(比如反向代理配置了proxy_hide_header Set-Cookie)
Redis 连接失败导致 session 回退到 file?
ThinkPHP 默认不会“静默降级”。只要 'type' => 'redis',连接失败就会抛出 think\exception\SessionException,页面直接 500。如果你看到 session 像“有时有效有时无效”,大概率是 Redis 连接池耗尽或超时未释放。
- 加
'timeout' => 2.5(秒),避免卡住整个请求;别用默认 0(无限等待) - 高并发下,
'host'别写127.0.0.1—— 容器或云服务器中可能走 IPv6 或 DNS 解析慢,换成localhost或真实内网 IP - 确认
php-redis扩展已安装:php -m | grep redis;APCu 或 Memcached 驱动不会干扰,但没装 redis 扩展时 TP6 会报扩展缺失,不是默默切 file
Redis 共享 session 的本质,是让所有 PHP 实例读写同一个 key 空间。真正难调的不是配置项,而是网络可达性、cookie 传递链完整性、以及 Redis 自身的 timeout 设置是否匹配业务会话周期。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










