1.在登入的時候儲存 session (userSession);
2.登入後編輯登入使用者資訊,編輯完成後並沒有重新更新userSession;
3.但是在中介軟體裡,擷取session的時候卻可以得到編輯後的資訊 (擷取方式:session('userSession'));
不明白這裡是為什嗎?還是在前邊處理的時候哪裡有問題....
求解!
回複內容:
1.在登入的時候儲存 session (userSession);
2.登入後編輯登入使用者資訊,編輯完成後並沒有重新更新userSession;
3.但是在中介軟體裡,擷取session的時候卻可以得到編輯後的資訊 (擷取方式:session('userSession'));
不明白這裡是為什嗎?還是在前邊處理的時候哪裡有問題....
求解!
找到一遍文章 裡邊這樣寫:
查看調用相關的代碼。laravel編譯後,在bootstrap/compiled.php中
class Middleware implements HttpKernelInterface { ... public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { $this->checkRequestForArraySessions($request); if ($this->sessionConfigured()) { $session = $this->startSession($request); // 啟動session $request->setSession($session); } $response = $this->app->handle($request, $type, $catch); // 調用controller的method if ($this->sessionConfigured()) { $this->closeSession($session); //關閉session $this->addCookieToResponse($response, $session); } return $response; } ... protected function closeSession(SessionInterface $session) { $session->save(); // 儲存session $this->collectGarbage($session); } }
可以看見,在調用完controller之後,調用了session->save()的方法,來主動的儲存session。這樣session才能落地儲存起來,如果在controller或者view裡面寫了exit;,那麼session是不會被儲存的,除非主動的寫Session::save()才能手工的儲存起來。(如果不知道函數調用情況,可以在controller中throw new Exception();,然後在/config/app.php的debug更改為debug=>true。可以看到函數的調用關係。)
但是原理還是不明白!!!因為測試的結果 並不是調用完每個controller 都會修改session。