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

作者: JONE 分类: PHPer 发布时间: 2020-07-13 11:43

原链接: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 信息