Laravel 5.2 Значения сеанса не сохраняются даже при использовании промежуточного программного обеспечения
У меня есть проект Laravel 5.2, который я использую как макет API для javascript-клиента, который я создаю. Теперь функция mock API будет заменена другим проектом Laravel. На данный момент мне просто нужно иметь возможность отправлять вызовы API и получать ожидаемые ответы.
В моем mock API я сохраняю статус аутентификации в сеансе.
Проблема, с которой я сталкиваюсь, заключается в том, что значения, которые я вводил в сеанс, не сохраняются между вызовами http.
![session put не сохраняется gif]()
Это похоже на qaru.site/info/455597/..., но дело в том, что я уже использую промежуточное ПО web
для моей группы API.
Я думал, что это могут быть разрешения для моей папки хранилища (я использую драйвер сеанса по умолчанию file
), брандмауэр является владельцем и имеет доступ на запись:
![разрешения на доступ к хранилищу]()
Плюс, если это была проблема с разрешениями, я бы подумал, что это приведет к ошибке выполнения.
Есть ли что-то еще, что мне не хватает?
ИЗМЕНИТЬ
Здесь содержимое Config::get('session')
:
![содержимое config:: get ('session')]()
И yep, класс StartSession
включен в группу промежуточного программного обеспечения web
:
![Класс StartSession в группе промежуточного программного обеспечения сети]()
Вот фрагмент файла cookie сеанса браузера и файла сеанса, созданного на веб-сервере:
![cookie cookie против файла сеанса]()
Здесь содержимое запроса:
![содержимое запроса]()
Ответы
Ответ 1
Это связано с изменением, которое было внесено в Laravel, что все маршруты по умолчанию являются частью промежуточного программного обеспечения "web", поэтому назначение его снова в файле routes.php приводит к его удвоению.
Решение заключается в том, чтобы удалить "сетевое" промежуточное программное обеспечение с ваших маршрутов или удалить автоматическое назначение из RouteServiceProvider.
Перед обновлением Laravel:
// /app/Providers/RouteServiceProvider.php
$router->group(['namespace' => $this->namespace], function ($router) {
require app_path('Http/routes.php');
});
После обновления Laravel:
// /app/Providers/RouteServiceProvider.php
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
Обратите внимание, как новое обновление автоматически применяет "сетевое" промежуточное ПО ко всем маршрутам. Просто удалите его здесь, если вы хотите продолжить использовать Laravel 5.2, как и раньше, (вручную назначая "промежуточное ПО" в ваших маршрутах .php).
Ответ 2
У меня была такая же проблема, и мне удалось заставить ее работать, заменив
Route::group(['middleware' => ['web']], function () {
...
});
с
Route::group(['middlewareGroups' => ['web']], function () {
...
});
Не знаю, почему это работает, хотя, когда вся документация предполагает, что мы используем ['middleware' => ['web']]
Ответ 3
У меня такая же проблема на 5.2
Я выяснил, что сеансы работают, если я регистрирую маршруты и промежуточное ПО внутри группы
Route::group(['middleware' => ['web']], function () {
Route::get('aktuell', "[email protected]");
# other routes ...
});
Но не если я назначу промежуточное ПО в конструкторе контроллеров
function __construct()
{
$this->middleware('web');
}
(это мой предпочтительный способ.)
работает, хотя явным образом сохраняя сеанс через
$request->session()->put("test3",time()."-anna");
$request->session()->save();
Ответ 4
Одна вещь, которая сделала трюк для меня, заключалась в том, чтобы убедиться, что для домена в config/session.php установлено значение null.
Ответ 5
У меня возникла одна и та же проблема, но ни один из ответов не помог мне. Для меня класс Illuminate\Session\Middleware\StartSession
всегда назывался так, как должен был быть, поэтому я знал, что было создано промежуточное программное обеспечение.
Когда я столкнулся с проблемой, я подошел к следующей теме где Тейлор Отуэлл упомянул, что вы должны использовать Session::save()
после установки переменной сеанса, Использование этого сработало для меня, но я до сих пор не знаю, почему это решило проблему.
Ответ 6
Для меня ни одна из вышеперечисленных проблем не решена. Ни группировка маршрутов, ни сеанс :: save(). Все еще проблема, и я не могу найти никакой проблемы.
Если кто-то может помочь. Я использую 5.4.36 версию Laravel.