Как удаляются просроченные сессии в Yii2?

В Yii2, удаляются просроченные сессии с помощью механизма "гребней" (garbage collection), который автоматически очищает и удаляет просроченные сессии.

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

1. Удаление просроченных сессий с использованием базы данных:
- Вам необходимо настроить компонент удаления сессий (Session), добавив его в конфигурационный файл config/web.php. Вы можете использовать, например, компонент db (компонент базы данных), если он уже был настроен, или создать новый компонент подключения session:

     'components' => [
         'session' => [
             'class' => 'yiiwebDbSession',
             'sessionTable' => 'my_session', // таблица в базе данных для хранения сессий
         ],
     ],

- Если вы не задали sessionTable, по умолчанию будет использоваться таблица {{%session}}. Миграция, создающая данную таблицу, уже есть в Yii2 Advanced Template. Если вы используете Basic Template, выполните команду yii migrate --migrationPath=@yii/web/migrations.

2. Удаление просроченных сессий с использованием файловой системы:
- Yii2 использует сессионные файлы для хранения данных сессий. Для удаления просроченных сессий в файловой системе, Yii2 предоставляет gcProbability (вероятность запуска гребней) и gcSessionTimeout (время жизни сессии до удаления).
- Добавьте компонент удаления сессий (Session) в конфигурационный файл config/web.php следующим образом:

     'components' => [
         'session' => [
             'class' => 'yiiwebSession',
             'gcProbability' => 1, // вероятность запуска гребеней, 0 - никогда, 100 - всегда
             'gcSessionTimeout' => 86400, // время жизни сессии (в секундах) до удаления
         ],
     ],

- gcProbability определяет вероятность запуска гребней сессий. Например, значение 1 означает, что гребни будут запускаться каждую сессию.
- gcSessionTimeout определяет время жизни сессии (в секундах), после которого сессия будет считаться просроченной и подлежит удалению.

Независимо от выбранного способа, всю работу по удалению просроченных сессий выполняет компонент Session или DbSession. Они обрабатывают проверку времени жизни сессий и удаляют их автоматически в соответствии с настройками, установленными в конфигурации приложения.