Запоминаем время последнего запроса юзера (last_request_time). Когда требуется узнать онлайн он или нет прибавляем к last_request_time, скажем, 10 минут.
last_request_time + 10 мин > current_time === юзер онлайн
Если этого не достаточно раз в
N секунд/минут стучим с клиента для обновления
last_request_time