php - 在 laravel 6 中重新加载后会话丢失
问题描述
这是简单的 sigin 方法:
登录控制器:
public function signin(Request $r)
{
$data['email'] = $r->email;
$data['password'] = md5($r->password);
if ($data['email'] == '' || $data['password'] == '') {
echo 'Please enter email or password.';
} else {
$userInfo = DB::table('users')->where('email', $data['email'])->get()->first();
if ($data['email'] == $userInfo->email && $data['password'] == $userInfo->password) {
$r->session()->put('userData', $data['email']);
$userData = $r->session()->get('userData');
return redirect('/userpanel')->with('status', $userData);
} else {
return redirect('/login');
}
}
}
家庭控制器:
public function user_index()
{
$data = DB::table('personals')
->join('companies', 'personals.companyId', 'companies.id')
->get();
return view('userDashboard')->with(['data' => $data]);
}
登录后,此方法重定向到用户面板,此处显示会话信息。但是,如果我在这里重新加载,则不会显示任何会话信息。在我的刀片中,我通过以下代码打印会话:
<div class="alert alert-success" class="d-block">
<div id="userEmail" >{{ session('status') }}</div>
</div>
我在 HomeController 和 LoginController 中使用它。但问题没有解决。
解决方案
使用with
你基本上是在将数据闪烁到会话中,它只会在下一个请求时保持在会话中,这就是为什么当你重新加载时你不会再得到那个了。
https://laravel.com/docs/5.8/session#flash-data
这是一个with()
实现,它使用 来刷新数据flash()
,这些数据将仅用于下一个请求。
public function with($key, $value = null)
{
$key = is_array($key) ? $key : [$key => $value];
foreach ($key as $k => $v) {
$this->session->flash($k, $v);
}
return $this;
}
更改此代码
public function user_index()
{
$data = DB::table('personals')
->join('companies', 'personals.companyId', 'companies.id')
->get();
session(['data' => $data]);
return view('userDashboard');
}
推荐阅读
- python - 在自定义 Keras 层中使用带有 tf.py_func 的 python 代码
- java - Java JPA - 将多对多结构保存到数据库 - 错误:尝试从空的一对一属性分配 id
- python - 实时人脸识别在树莓派3上跑得很慢
- list - 多个列表haskell
- javascript - 我们可以将浏览器 JavaScript 的执行上下文从 Window 对象更改为其他对象吗?
- javascript - 用户将确切数量的元素输入到数组中
- stream - 没有元素的无限流
- assembly - 将寄存器加载到自身的指令的目的是什么?
- native - 如何使用 MethodChannel 从本机平台调用应用程序 Dart 部分中的方法?
- algorithm - Tree : BST 中栈实现与遍历递归调用的性能比较