有关于laravel框架中Session的疑惑
Laravel8.x框架中
'api' => [
// \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:global',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
每次请求这个路由组内的接口,为啥每次都会存入一个_token的序列化进入session呢?
session的driver是redis的,但是存入的key值为啥是读取了CACHE_PREFIX缓存的前缀
存入的数据类型与这种
a:3:{s:6:"_token";s:40:"8eJbSWEsdsads2IR1sr55yBdvpSQuMIvTFuZze";s:9:"_previous";a:1:{s:3:"url";s:57:"http://www.xxxx.com/get?page=1&per_page=20";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}
session配置的是redis的驱动呀,但是为啥存入的key会是cache的prefix
_token
问题可以看下这个 CSRF 保护《Laravel 10 中文文档》session
使用redis
驱动,从源码来看其实是Cache
的RedisStore
,配置文件有解释疑惑解决了! 通过观察Laravel框架源码,发现中间件StartSession中会对于每个中间件内的请求存入session 具体方法如下
这就解释为什么每次请求都会往session存入一个_token值了。至于为啥会去读cache的前缀就在另外一步。
具体就是这个SessionManager 的类在处理会根据不同配置创建不同的缓存驱动 至于为什么是调用的是默认的cache驱动我还在研究中