Laravel在注销时清除整个会话

时间:2018-04-14 12:48:13

标签: php laravel laravel-5.4

我在会话中保留了不同的内容,我在用户登录和注销时都使用了这两种内容。问题是当用户注销时,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('/');
}

因为我不想更改核心类,如何避免在用户注销时丢失会话数据?

3 个答案:

答案 0 :(得分:3)

默认的LoginController.php使用特征AuthenticatesUsers.php。 因此,请将此代码复制到LoginController.php以覆盖它。

def _if_between(value, arr):
    for borders in arr:
        return value in range(borders[0], borders[1])

答案 1 :(得分:1)

覆盖登录控制器中的注销方法我会猜测。在您的控制器中编写此函数(它使用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('/');
}

我从未这样做,但我认为它可能有效。

答案 2 :(得分:0)

您不想更改代码以使会话不会失效。它的发生是有原因的。安全。

相反,创建一个唯一代码并存储链接到该代码的购物车信息。然后将该代码存储在客户端的 cookie 中。然后每次看到 cookie 时,就从数据库加载购物车。

不要存储任何机密信息。如果其他人看到它(不是真的),一个人想要购买的东西不会有风险,因此不必担心将其存储为 cookie。只是不要存储链接到此 cookie 的私人信息。