Сам не делал, но могу придумать такой алгоритм:
1. Пользователь обращается к серверу:
1.1 начанием сессию, чтобы знать, кто это
1.2 заносим пользователя в БД, в том числе время обращения к серверу
2. Полькователь снова обратился к серверу
2.1 обновляем время последнего обращения
3. Пользователи, которые обратились к серверу менее N минут назад - онлайн, иначе оффлайн