首页 > 解决方案 > 在 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 中使用它。但问题没有解决。

标签: phplaravelsessionlaravel-6

解决方案


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

推荐阅读