Вариант 1: Использовать сокеты
Плюсы:
- Расходует мало ресурсов
- Позволяет более продуктивно делать чаты, уведомления и т.д.
Минусы:
Вариант 2: При каждом действии юзера записывать время и показывать юзеров, активных в последние
N минут
Плюсы:
- Отсутствует потребление лишних ресурсов
Минусы:
- Низкий уровень живости (оффлайн-юзеры могут показываться живыми)
Вариант 3: Опрашивать с помощью JS сервер каждые N-секунд (и обновлять время, как в в.2)
Минусы: большое потребление ресурсов