return [ 'driver' => 'file', 'files' => storage_path().'/framework/sessions', ];
Мои storage/framework/sessions имеют 755 разрешений.
Когда я помещаю эти 2 строки в свой контроллер
Session::set('aa', 'bb'); dd(Session::get('aa'));
Я получаю ожидаемый вывод "bb" . Но если я прокомментирую первую строку:
// Session::set('aa', 'bb'); dd(Session::get('aa'));
и обновить страницу, я все еще ожидаю "bb" но получаю null .
Кроме того, storage/framework/sessions пустые.
Что мне нужно сделать для работы сеанса?
Laravel 5 обрабатывает сеансы через класс промежуточного ПО StartSession . Что еще более важно, это промежуточное ПО представляет собой TerminableMiddleware а код, который фактически сохраняет данные (в вашем случае для файла сеанса), находится в методе terminate , который запускается в конце жизненного цикла запроса:
public function terminate($request, $response) { if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions()) { $this->manager->driver()->save(); } }
При вызове dd(Session::get('aa')); запрос прерывается до того, как может быть вызван метод завершения промежуточного программного обеспечения.
Как ни странно, документальная документация Laravel Middleware фактически объясняет логику Terminable Middleware, предоставив промежуточное ПО Laravel StartSession в качестве примера:
Например, промежуточное программное обеспечение «сеанс», включенное в Laravel, записывает данные сеанса в хранилище после того, как ответ отправлен в браузер.
При этом попробуйте использовать var_dump() вместо использования dd() .