我在会话中保留了不同的内容,我在用户登录和注销时都使用了这两种内容。问题是当用户注销时,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('/');
}
因为我不想更改核心类,如何避免在用户注销时丢失会话数据?
答案 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 的私人信息。