我有一个项目,登录用户可以填写一些数据。然后将该数据存储在名为“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。
提前致谢。
答案 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以及填写表单时插入的设置。这反过来将帮助登录用户,因为他们不必再次填写所有细节。
希望这会帮助你。快乐的编码。欢呼声。