Laravel的Session能存进Redis,但仅设SESSION_DRIVER=redis不够;必须确保config/session.php中connection值与config/database.php中redis连接键一致、安装phpredis或predis扩展、正确配置REDIS_HOST(如Docker环境用host.docker.internal),并执行php artisan config:clear后用session()->getHandler()验证返回Redis类名。

直接上结论:Laravel 的 Session 能存进 Redis,但光改 SESSION_DRIVER=redis 不够,session()->put() 写不进去多半是 Redis 连接没通、驱动没启用,或配置项对不上——不是代码写错了,是环境没搭对。
怎么确认 Redis 驱动真在用?
别信 .env 里写了就生效。Laravel 启动时读取 config/session.php,而它默认从 env('SESSION_DRIVER', 'file') 取值。改完 .env 必须清缓存:
-
php artisan config:clear(必须执行,否则旧配置还在内存里) - 然后进
php artisan tinker,运行:session()->getHandler()—— 返回Illuminate\Session\CacheBasedSessionHandler或类似带Redis字样的类名才算对;返回FileSessionHandler就说明还在用 file 驱动 - 也可以查
config('session.driver')输出是不是"redis"
Redis 连接配错的三个高频坑
驱动设成 redis 了,但 session 数据还是没进 Redis,大概率卡在这三处:
-
config/session.php里的'connection'值(比如'session')必须和config/database.php中redis数组下的某个键完全一致(如'session' => [...]),大小写、拼写都不能差 - 没装 PHP Redis 扩展或
predis/predis包:
– Laravel 10+ 默认优先用phpredis扩展,没启用会静默回退到 file 驱动(无报错!)
– 若用predis,得composer require predis/predis,且config/database.php中'client' => 'predis' -
REDIS_HOST填127.0.0.1却跑在 Docker 容器里:容器内访问宿主 Redis 应该填host.docker.internal(Mac/Win)或宿主内网 IP(Linux),否则连接直接超时
Session 数据在 Redis 里长什么样?
不是哈希,不是 JSON,就是一条 String 记录:
- Key 格式是
laravel_session:{sessionId}(前缀可由config/session.php的'prefix'控制) - Value 是 PHP
serialize()后的原始字符串,内容包含payload(序列化后的 session 数组)、_token、login_*等字段 - 可以用
redis-cli直接看:redis-cli -h $REDIS_HOST -p $REDIS_PORT get "laravel_session:abc123" - 别手动删这个 key:用
session()->forget('key')或session()->flush(),否则 Laravel 的过期逻辑和 GC 会乱
登录后要不要调 session()->regenerate()?
要,而且必须在登录成功、写入用户数据之后立刻调用:
-
session()->regenerate()销毁旧 session 数据 + 换新 ID,防会话固定攻击(Session Fixation) - 它保留当前已
put()的数据(比如session()->put('user_id', 123)),只是换 ID - 别用
session()->migrate():它只换 ID,不删旧数据,旧 ID 还能读到 session,安全性弱 - 确保中间件顺序:
StartSession必须在你的登录逻辑之前执行,否则regenerate()会无效
最常被忽略的是:Redis 连接失败时 Laravel 不报错,session()->put() 看似成功,实则数据全丢在空里。验证一定要绕过 Laravel,用 redis-cli ping 和 Cache::store('redis')->put() 先测通底层连通性,再调 session。



















