Подход может быть следующим:
вы создаете промежуточное программное обеспечение, которое выполняет следующую процедуру process_response:
- проверяет наличие cookie, называемого «онлайн», но только если пользователь аутентифицирован
- если файл cookie отсутствует,
- установить файл cookie с именем «online» со значением «1»
- установить срок жизни файла cookie равным 10 минутам
- обновите поле 'last_login' в auth.User для этого пользователя, указав текущую дату и время
. Теперь вы все вошли в систему в своей таблице auth.User.Все пользователи, у которых last_login новее, чем datetime.now () - интервал (15 минут), могут рассматриваться как «онлайн».
База данных будет записываться для каждого вошедшего в систему пользователя примерно каждые 10 минут.Отрегулируйте значения «10» и «15» в соответствии со своими потребностями.
Преимущество здесь в том, что записи в базу данных происходят редко (в соответствии с вашими двумя числовыми настройками 10/15).А для оптимизации скорости убедитесь, что last_login проиндексирован, поэтому фильтр в этом поле, включая Count, очень быстрый.
Надеюсь, это поможет.