Laravel 5 - 会话不起作用

Lim*_*nte 9 php session laravel laravel-5

这是config/session.php:

return [
    'driver' => 'file',
    'files' => storage_path().'/framework/sessions',
];
Run Code Online (Sandbox Code Playgroud)

storage/framework/sessions有755的权限.

当我把这两行放在我的控制器中时

Session::set('aa', 'bb');
dd(Session::get('aa'));
Run Code Online (Sandbox Code Playgroud)

我收到预期的"bb"输出.但如果我评论第一行:

// Session::set('aa', 'bb');
dd(Session::get('aa'));
Run Code Online (Sandbox Code Playgroud)

和刷新页面,我仍然期待,"bb"但得到null.

也是storage/framework/sessions空的.

我该怎么做才能使Session工作?

Bog*_*dan 18

Laravel 5通过一个名为的中间件类来处理会话StartSession.更重要的是,这个中间件是一个TerminableMiddleware实际保存数据的代码(在您的情况下是会话文件)位于terminate方法中,该方法在请求生命周期结束时运行:

public function terminate($request, $response)
{
    if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions())
    {
        $this->manager->driver()->save();
    }
}
Run Code Online (Sandbox Code Playgroud)

在调用中间件dd(Session::get('aa'));terminate方法之前调用请求时.

有趣的是,Laravel中间件文档实际上以Laravel StartSession中间件为例解释了可终结中间件逻辑:

例如,Laravel附带的"会话"中间件将响应发送到浏览器后将会话数据写入存储.

话虽如此,尝试使用var_dump()而不是使用dd().