@VvArtem

Как решить проблему с сессиями при включении EncryptCookie в Laravel 5.7?

Столкнулись с проблемой, что после переноса проекта на сервер сессия создается при каждом запросе. Сессии хранятся в файлах и при каждом запросе создается новый файл с содержимым.

Нашли зависимость в следующем, сессии начинают работать правильно если в группе роутов web убрать EncryptCookies.

Поэтому интересно в чем именно проблема и как оно влияет на сами сессии?

// app/Http/Kernel.php

protected $middlewareGroups = [
        'web' => [
            \Illuminate\Cookie\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ]
    ];
  • Вопрос задан
  • 390 просмотров
Решения вопроса 1
@VvArtem Автор вопроса
В общем проблема оказалась в конфиге php, был включен параметр mbstring.func_overload 2. А там по цепочке неправильно работал метод random_bytes, т.е. он выдавал строку, длину которой strlen считал не правильно. В итоге метод проверки валидности кук выдавал false.

Начиная с php7 композер будет выдавать ошибку, что этот параметр нужно выключить, так что сомневаюсь, что кто-то еще столкнется с этой проблемой.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
fl4r3
@fl4r3
Кино, вино и домино
Можно просто не выключая EncryptCookies, добавить название куки в массив $except внутри этого класса чтобы ее не шифровать. Идентификатор сессии хранится в куки у которой есть время своей жизни, и которая шифруется для защиты от перехвата куки по сети или с устройства пользователя. Сессия будет "пропадать" при каждом запросе только если файла с сессией на сервере нет (например, при балансировки запросов между разными серверами php в пуле) или куки с идентификатором не будет слаться браузером. Я думаю проблема, скорее всего, в чем-то другом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы