Попытаюсь сформулировать проблему как можно четче.
Я добавил на сайт DbSession (как это советовалось тут), чтобы он регистрировал последнюю активность всех пользователей. Проблема в том, что при одном запросе от любого пользователя, происходит огромное кол-во записей (удаляется старая сессия, добавляется новая, и так много раз). За несколько дней разработки сайта я обнаружил, что идентификатор таблицы остановился чуть ли не на 8 миллионе.
И еще косвенная проблема.
Если пользователь зарегистрирован, DbSession сам определяет пользователя из таблицы и обновляет его последнюю активность (но огромное кол-во обращения к бд остается). Если пользователь не зарегистрирован, то огромное кол-во раз удаляется сессия и снова добавляется.
Нужно чтобы происходил один запрос в DbSession при одном запросе или чтобы можно было определять не зарегистрированных пользователей и тоже только обновлять сессию, без удаления и добавления новой. А лучше то и то:)
Как это можно реализовать?
Все гораздо проще. Чтобы незарегистрированных пользователей тоже идентифицировало, необходимо добавить использование куки в конфигах приложения.
$config = [
'components' => [
'session' => [
'class' => 'yii\web\DbSession',
'writeCallback' => function ($session) {
return [
'user_ip' => Yii::$app->request->userIP,
'user_id' => Yii::$app->user->id,
'last_write' => time(),
];
},
'useCookies' => true, // ВКЛЮЧАЕМ ИСПОЛЬЗОВАНИЕ КУКИ
'timeout' => 60 * 60 // 1 hour
],
]
]
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости