В 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
. Они обрабатывают проверку времени жизни сессий и удаляют их автоматически в соответствии с настройками, установленными в конфигурации приложения.