2010-04-19 4 views
0

Заявление о проблемах - Хотелось бы узнать, активен ли пользователь определенного веб-приложения (т.е. входит в систему и использует сайт) и может запрашивать список активных пользователей или определять статус активности пользователя ,Ведение списка активных пользователей для Web

Ограничения - Не нужно быть точным (то есть, если пользователь был активным в течение определенного периода времени, это нормально сказать, что они активны, даже если они закрыли свой браузер).

Я чувствую, что должен быть шаблон проектирования для этого типа проблем, но он не смог найти что-либо здесь или в другом месте в Интернете.

подходов Я рассматриваю:

  1. Поддерживайте таблицу, которая обновляется каждый раз, когда пользователь выполняет действие (или некоторое подмножество действий). Затем будет запрашивать пользователей, которые выполнили действие в течение некоторого порога времени.

  2. Пробуйте следить за информацией о сеансе и вести таблицу, в которой перечислены вошедшие в систему пользователи и истекает через определенный промежуток времени.

  3. Некоторые другие более стандартные способы сделать это?

Как вы подходите к этой проблеме (опять же, с точки зрения дизайна)?

Спасибо!

+0

Какие рамки вы используете? –

+0

Yii ............ –

+0

Кэширование в Yii: http://www.yiiframework.com/doc/guide/caching.overview –

ответ

1

У вас будет больше удачи, если вы подумаете об этом с точки зрения компонента или модуля, а не таблицы. Как я вижу это, вам нужны следующие интерфейсы.

public interface IActiveUsers { 
    bool IsUserActive(User u); 
} 
public interface ITrackActiveUsers { 
    void MarkUserAsActive(User u); 
} 

Вы можете реализовать их с помощью базы данных, но почему бы не использовать только встроенный кэш выбранной веб-фреймворка?

В основном При маркировке активного пользователя вставьте ключ в кэш с помощью ключа типа «LoggedInUser-1234», где 1234 - это уникальный идентификатор пользователя. Затем просто установите тайм-аут для того, что вы хотите (5 минут, 10 и т. Д.), А значение равно true. Затем при запросе, если пользователь активен, просто проверьте, содержит ли кеш истинное значение для этого же ключа.

0

Я думаю, что # 1 - это адекватное решение для вашей проблемы, и я думаю, что также общий. Он позволяет вам определить, какие HTTP-запросы вы считаете пользователем «активным» (то есть, решать, когда и следует ли обновлять таблицу «последнего действия»), и/или классифицировать действия (имея больше столбцов «последний XXX-действий» и обновлять каждую из их после того, как пользователь выполнит другое действие).

Смежные вопросы