Разные сеансы, созданные в Laravel при каждом запросе

#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,
    ],
];