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.