所以我有一个Laravel 10项目,它使用Sanctum的SPA认证,它将会话存储到Redis,并遇到了服务器上RAM突然100%使用的问题。
当我查看Chrome的devtools的Network选项卡时,我看到每次请求后会话值都会发生变化。
我不会在任何地方调用session()->regenerate()
,也不会以任何方式操纵会话。
在这种情况下,我尝试在本地修复应用程序的storage
文件夹内的文件/目录权限。这是一个好主意,因为我在Devtools中看到会话值不再更改,它保持不变。
好吧,我想确定一下,所以我使用redis-cli
查看了Redis。我执行了FLUSHDB
,向laravel应用程序发出了一些请求,然后执行了
KEYS *
字符串
这最终注销了很多条目-每个请求。
我在app\Http\Kernel.php
中的中间件变量看起来像这样:
protected $middleware = [
StartSession::class,
TrustProxies::class,
PreventRequestsDuringMaintenance::class,
ValidatePostSize::class,
TrimStrings::class,
ConvertEmptyStringsToNull::class,
];
型
1条答案
按热度按时间30byixjq1#
我认为这可能是因为跨源XHR请求。在它们正常执行之前,我们会等待,在每一个之前都有preflight(OPTIONS)请求发生。
这个请求基本上不能包含cookie,因为我们没有包含session值,Laravel的
StartSession
中间件,它在每个请求上执行,生成新的session值并将其保存到Redis。这是生成所有未知会话的地方。所以我从
$middleware
变量中删除了StartSession
中间件并创建了一个新的:字符串
这样做的目的是当请求的类型是OPTIONS时,它跳过执行
StartSession
中间件。