[英]Laravel clears whole session on logout
我在我的會話中保留了不同的東西,當用戶登錄和注銷時我都會使用它們。 問題在於,當用戶注銷時,laravel 會清除我在會話中存儲的所有內容:
發生這種情況是因為 laravel 核心類 AuthenticatesUsers 看起來像這樣:
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return redirect('/');
}
因為我不想更改核心類,所以如何避免在用戶注銷時丟失會話數據?
默認的 LoginController.php 使用特性 AuthenticatesUsers.php 。 所以將此代碼復制到 LoginController.php 以覆蓋它。
public function logout(Request $request)
{
$data = session()->get('cart');
$this->guard()->logout();
$request->session()->invalidate();
$request->session()->regenerate();
session()->put('cart', $data);
return $this->loggedOut($request) ?: redirect('/');
}
我想在登錄控制器中覆蓋注銷方法可以解決問題。 在你的控制器中編寫這個函數(它是用 AuthenticatesUser trait 編寫的):
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
// session logic here, just pull out things that need to and left other things as it is.
// $request->session()->invalidate();
return redirect('/');
}
我從來沒有這樣做過,但我認為它可能會奏效。
您不想更改代碼以使會話不會失效。 它的發生是有原因的。 安全。
相反,創建一個唯一的代碼並存儲鏈接到該代碼的購物車信息。 然后將該代碼存儲在客戶端的 cookie 中。 然后每次看到 cookie 時,就從數據庫加載購物車。
只是不要存儲任何機密信息。 如果其他人看到它(不是真的),一個人想要購買的東西不會有風險,因此不必擔心將其存儲為 cookie。 只是不要存儲鏈接到此 cookie 的私人信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.