Laravel - 通过user_ID区分会话

时间:2018-03-16 09:05:14

标签: php laravel session laravel-5

我有一个项目,登录用户可以填写一些数据。然后将该数据存储在名为“Main_settings”的会话中。我这样做的方法是在我的控制器中执行此操作:

private $predefinedArray = ['user_id', 'city', 'postal_code', 'street_name',
                            'house_number', 'store_name', 'store_tel',
                            'store_hoo', 'vat_number'];

public function store(Request $request)
{
    foreach($this->predefinedArray as $value) {
        $request->session()->put('main_settings.' . $value, $request->input($value));
    }

   return redirect('themes');
}

我在视图中执行此操作来调用会话变量:

{{ session('main_settings.store_name') }}

如果用户返回,他的信息仍然存在,那不是问题。问题是,如果John Doe登录并开始填写表单然后注销。并且Jane Doe登录,John Doe填写的信息将被显示,而Jane Doe甚至没有填写任何内容。

不知何故,我需要通过用户ID区分会话,以便我可以在视图中调用登录用户的会话。我怎么能做到这一点?

正在使用表单发送user_id。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

问题是,如果John Doe登录并开始填写   表单然后注销。并且Jane Doe登录,信息   填写的John Doe将会显示,而Jane Doe甚至没有填写   还有什么。

这种情况正在发生,因为当John Doe退出时你并没有忘记这些价值观。如果您想在John Doe注销时删除插入的值,请查看此内容。

<强> Controller.php这样

private $predefinedArray = [
    'user_id', 'city', 'postal_code',
    'street_name', 'house_number', 'store_name',
    'store_tel', 'store_hoo', 'vat_number'
];

public function logout()
{
    session()->forget('main_settings');

    auth()->logout();

    return redirect('/');
}

这可以帮助您实现结果。

如果出于任何原因,您希望保留会话中的值,则可以执行以下操作:

public function store(Request $request)
{
    foreach($this->predefinedArray as $value) {
        session()->put(auth()->id().'.main_settings.' . $value, $request->$value);
    }

   return redirect('themes');
}

通过添加auth()->id(),您可以在会话中保留用户的ID以及填写表单时插入的设置。这反过来将帮助登录用户,因为他们不必再次填写所有细节。

希望这会帮助你。快乐的编码。欢呼声。