Как делал я в php only проектах.
Я делал глобальный middleware который обновлял онлайн пользователя при каждом запросе. (Редис + ID с бд).
Потом когда кто то заходил на профиль человека то просто проверял онлайн ли он (если прошло больше 5 минут с последнего действия то говорил что он off и писал в редис off и потом уже не сверял время).