Laravel中Api路由組使用session解決辦法

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,
 ],

我發現將EncryptCookiesStartSession兩個中間件放到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 信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章