Laravel中Api路由组使用session解决办法

158次阅读
没有评论

原链接:https://blog.csdn.net/qq_37788558/article/details/103584964

Laravel 中 Api 路由组使用 session 解决办法

首先,不建议在 laravel 的 api 路由组中使用 session 维持会话,这不是一个好的做法。不过我们可能在某些客观条件下,需要使用,今天记录下自己遇到的坑。
中间件

api 路由组需要同时添加两个中间件,缺一不可

\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,

 

StartSession 中间件中主要是设置 session 文件内容、设置响应头中的 set-cookie 字段,且框架对 cookie 内容进行了加密,所以如果不添加 EncryptCookies 中间件的话,会被匹配不到实际的 session id,成为无效的会话。
中间件位置

‘api’ => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
‘throttle:60,1’,
‘bindings’,
\Barryvdh\Cors\HandleCors::class,
],

 

我发现将 EncryptCookies、StartSession 两个中间件放到 api 数组末尾,会不生效,可能是上边的中间件有些影响,具体没再深究【2020.2.25 日补充:放到 Cors 中间件后边会不生效,建议往前方或者放在非官方的中间件的前边,以避免影响】,因为也很少这样用,不过这个问题浪费了我大量时间,特此提醒大家以下。
写入 session

其实在配置好两个中间件后,laravel 封装的 session 功能就可以使用了

session()->put(‘test’, 123);
// 这里不需要执行 session()->start() 和 session()->save();
// 而且,如果添加那两个中间件的话,执行了 start 和 save 也不起作用

包括 auth 相关的都可以使用,比如登陆

$user = User::first();
auth()->login($user);

// 下一次请求时
var_dump(auth()->user());
// 可以获取 user 信息

正文完
有偿技术支持加微信
post-qrcode
 
评论(没有评论)
验证码