1. 程式人生 > >laravel中的session使用過程中的問題

laravel中的session使用過程中的問題

1,有一個坑叫做session沒有開啟

laravel的session開啟是放在web中介軟體中的,如果你編寫路由的時候忽略到掉使用中間web,就會導致專案時候過程中,嚐嚐發現自己的session沒有儲存成功,但是,在專案中Session::put後接著Session::get會發現值是有的等各種情況

這時候可以進行兩種方式:

(1):加入web中介軟體,如果寫在其他中介軟體的話,先把web放到前面如

'middleware' => ['web', 'checkWechat'],

(2),將中介軟體下面的開啟放入到自己的專案或中介軟體中

在app/Http/Kernel.php檔案下的$

middlewareGroups 下的web陣列中有一個

\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 的值改一致