Laravel 10+Sanctum SPA认证场景下Redis会话内存占用过高问题求助
Laravel 10+Sanctum SPA认证场景下Redis会话内存占用过高问题求助
各位大佬好,我最近碰到一个非常棘手的问题,想请教下大家的思路:
我维护着一个基于Laravel 10的项目,用的是Sanctum的SPA认证方案,会话存储用的是Redis。结果突然出现服务器内存直接拉满到100%的情况,排查后发现是Redis里的会话条目暴增导致的。
排查过程和发现
- 打开Chrome开发者工具的Network标签观察,发现每次请求后session的值都会发生变化,但我在项目代码里从来没调用过
session()->regenerate(),也没有任何手动操作会话的逻辑。 - 我试着在本地修复了项目
storage目录的文件/文件夹权限,当时看起来好像有效——Devtools里显示的session cookie值不再变化了,一直保持同一个。 - 但为了彻底确认,我用
redis-cli做了验证:- 先执行
FLUSHDB清空Redis里的旧数据 - 给项目发送了几个请求
- 再执行
KEYS *查看Redis中的键值
结果发现Redis里生成了大量会话条目,几乎每个请求对应一条,这说明前端显示的cookie值没变,但后端其实一直在生成新会话,内存占用的问题根本没解决。
- 先执行
我的中间件配置
贴一下app\Http\Kernel.php里的全局中间件配置:
protected $middleware = [ StartSession::class, TrustProxies::class, PreventRequestsDuringMaintenance::class, ValidatePostSize::class, TrimStrings::class, ConvertEmptyStringsToNull::class, ];
核心问题总结
简单来说:Laravel会在每次请求时生成新会话,哪怕前端Devtools显示的session cookie值保持不变,这导致Redis里的会话数量急剧增加,直接把服务器内存占满了。
有没有大佬碰到过类似的问题?麻烦给点排查方向或者解决方案,万分感谢!
备注:内容来源于stack exchange,提问作者jacob_frankovic
相关产品推荐
相关产品推荐

