Некорректная работа DbSession в Yii2

148
10 июня 2018, 11:10

Попытаюсь сформулировать проблему как можно четче.

Я добавил на сайт DbSession (как это советовалось тут), чтобы он регистрировал последнюю активность всех пользователей. Проблема в том, что при одном запросе от любого пользователя, происходит огромное кол-во записей (удаляется старая сессия, добавляется новая, и так много раз). За несколько дней разработки сайта я обнаружил, что идентификатор таблицы остановился чуть ли не на 8 миллионе.

И еще косвенная проблема.

Если пользователь зарегистрирован, DbSession сам определяет пользователя из таблицы и обновляет его последнюю активность (но огромное кол-во обращения к бд остается). Если пользователь не зарегистрирован, то огромное кол-во раз удаляется сессия и снова добавляется.

Нужно чтобы происходил один запрос в DbSession при одном запросе или чтобы можно было определять не зарегистрированных пользователей и тоже только обновлять сессию, без удаления и добавления новой. А лучше то и то:)

Как это можно реализовать?

Answer 1

Все гораздо проще. Чтобы незарегистрированных пользователей тоже идентифицировало, необходимо добавить использование куки в конфигах приложения.

$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
        ],
    ]
]
READ ALSO
Как удалить всю авторизацию в Laravel

Как удалить всю авторизацию в Laravel

Использовал команду php artisan make:auth для авторизации но теперь нужно все изменения удалить, не хочу переустанавливать Laravel, есть ли встроенные...

178
Воспроизвести видео / показать Ip

Воспроизвести видео / показать Ip

Возможно ли при нужном юзерагенте вывести Ip адрес,а в остальных случаях показывать нужное видео

159
Перегрузка операторов ввода и вывода C++ [дубликат]

Перегрузка операторов ввода и вывода C++ [дубликат]

На данный вопрос уже ответили:

218
Несовпадение брейкпоинтов с кодом

Несовпадение брейкпоинтов с кодом

Периодически замечаю, что в студии слетают брейпоинтыРаньше помогал clean - rebuild

176