簡體   English   中英

Laravel 在注銷時清除整個會話

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM