laravel中的session使用過程中的問題
1,有一個坑叫做session沒有開啟
laravel的session開啟是放在web中介軟體中的,如果你編寫路由的時候忽略到掉使用中間web,就會導致專案時候過程中,嚐嚐發現自己的session沒有儲存成功,但是,在專案中Session::put後接著Session::get會發現值是有的等各種情況
這時候可以進行兩種方式:
(1):加入web中介軟體,如果寫在其他中介軟體的話,先把web放到前面如
'middleware' => ['web', 'checkWechat'],
(2),將中介軟體下面的開啟放入到自己的專案或中介軟體中
在app/Http/Kernel.php檔案下的$
\Illuminate\Session\Middleware\StartSession::class
將該程式碼複製過去即可
2,中介軟體使用session發現失效
原因主要有以下幾點:
(1)session沒有開啟,解決辦法同方法如1
(2)larvel為了防止不斷的載入更新session,larvel並不是所有的put都立馬將內容儲存到檔案或者資料庫中
一般採用的機制是全部頁面載入完,再將頁面的session儲存到相關的檔案或資料庫中
如果頁面沒有載入完或者其他地方錯誤使用dd(),die(),exit();都會造成session沒有儲存到檔案或資料庫中,下次使用將無法 獲取。
解決辦法:1,將dd(),die(),exit()等終止操作更換為return,表示頁面已經更新完
2,使用Session::put之後使用Session::save()強制儲存
(3) 路由分組不合理,為了讓同一個專案可以給不同模組使用,而相互直接不影響,laravel將不同分組的下的session的token
預設變為的不同,導致你載入其他路邊地址的時候session不統一,從而獲取不到值
解決辦法: 1,將相關路由建立到同一個分組下面
Route::get('/', function () { //路由放在這裡})->middleware('web'); 或者 Route::group(['middleware' => ['web']], function () { //路由放在這裡});
2,使用共享機制讓所有相關域名下的所有專案共享同一個session
此操作必須使用共同資料庫或者redis,更改.env檔案即可
SESSION_DOMAIN=.xxx.com //這裡自定義自己的域名 注意前面有個.
將兩個專案中APP_KEY 的值改一致