Laravel 5.4页面重新加载会话删除变量

时间:2018-01-07 14:04:20

标签: php session laravel-5.4

class LoginController extends Controller
{
    public function processLogin(LoginRequest $request)
    {
        $email = $request->get('email', '');
        $password = $request->get('password', '');

        $token = $this->_loginService->processLoginAttempt($email, $password);

        Session::put('access_token', $token);
        Session::save();

        return redirect()->route('portals');
    }

    public function showPortals(Request $request)
    {
        dd(Session::get('access_token'));
    }

    ....

}

请求的middleware组设置为web。 执行processLogin()控制器方法并重定向到showPortals()后,access_token将被转储到屏幕上。但是,刷新页面时,会清除该会话变量。

奇怪的是,代替在redirect()内执行processLogin()而不是dd(),然后访问showPortals()端点,会话令牌仍然存在,因为它应该,即使多次刷新页面。

我在某处读到Session::save()需要一段时间来保存(可能是异步的?),这可能导致这种行为?

我尝试了所有其他方法,但会话变量在页面重新加载时不会持续存在。

1 个答案:

答案 0 :(得分:0)

这是一个代码示例。保存会话时,您必须提供密钥,数据和持续时间,或者如果您愿意,可以永久保存。

class LoginController extends Controller
        {
            public function processLogin(LoginRequest $request)
            {
                $email = $request->email;
                $password = $request->password;

                $token = $this->_loginService->processLoginAttempt($email, $password);

    //this will save your token for 24 hours
                Session::put('access_token', $token, 60*24);

                return redirect()->route('portals');
            }

            public function showPortals(Request $request)
            {
                dd(Session::get('access_token'));
            }

            ....

        }