laravel 6中重新加载后,会话丢失

时间:2019-12-30 08:50:46

标签: php laravel session laravel-6

这是简单的sigin方法:

LoginController:

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');
        }
    }
}

HomeController:

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中使用它。但是问题没有解决。

2 个答案:

答案 0 :(得分:0)

使用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');
}

答案 1 :(得分:0)

将此添加到刀片文件中。

 @if(\Session::has('status'))
 <span>{{\Session::get('status')}}</span>
  @endif