#php #laravel #session
#php #laravel #сеанс
Вопрос:
У меня следующая проблема: всякий раз, когда я делаю один запрос к Laravel, используется один и тот же сеанс, всякий раз, когда я делаю несколько Ajax-запросов, Laravel продолжает создавать новые сеансы.
Я применил промежуточные программы StartSession и EncryptCookies к маршрутам API. Мое ядро выглядит следующим образом:
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
// IlluminateSessionMiddlewareAuthenticateSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
AppHttpMiddlewareVerifyCsrfToken::class,
IlluminateRoutingMiddlewareSubstituteBindings::class,
],
'api' => [
AppHttpMiddlewareEncryptCookies::class,
'bindings',
AddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
],
У кого-нибудь есть идея, почему создается несколько новых сеансов, когда на практике файл cookie сеанса должен обновляться в отношении уже созданного сеанса.
Комментарии:
1. Что вы используете для тестирования этого?
2. Я обращаюсь к странице, где эта страница выполняет несколько вызовов ajax для извлечения информации из маршрутов api.
3. Ваши маршруты api не будут обрабатывать данные сеанса, как вы ожидаете. Предполагается, что API-интерфейсы должны быть без состояния , поэтому было бы лучше иметь другой идентификатор (например
api_key
) для идентификации пользователя / клиента.
Ответ №1:
HTTP-приложения не имеют состояния, что означает, что ваши сеансы обрабатываются вручную для нескольких запросов.
Очистите все данные сеанса
$request->session()->flush();
Сгенерируйте новый идентификатор сеанса
$request->session()->regenerate();
Latavel — это не фреймворк, который ожидает
Ответ №2:
AddQueuedCookiesToResponse::class
Должно быть:
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class
Вот мои промежуточные группы ядра для справки
protected $middlewareGroups = [
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
// IlluminateSessionMiddlewareAuthenticateSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
AppHttpMiddlewareVerifyCsrfToken::class,
IlluminateRoutingMiddlewareSubstituteBindings::class,
],
'api' => [
'throttle:60,1',
AppHttpMiddlewareEncryptCookies::class,
'bindings',
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
],
];