Если не нужна точность, а будет достаточно скажем 15 мин, то я бы вариант из предыдущего ответа немного подправил, если last_request_time, обновляется с каждым новым запросом пользователя, то это лишний update в базу, а это не зачем так часто делать.
Тогда лучше сделать так:
В сессию пользователя храним дату последнего обновления состояния в БД, и каждый новый запрос проверяем его (online_expire < currentTime), если пора обновлять состояние, то в базе обновляем колонку (online_expire = currentTime + 15), ну и в сессии тоже обновляем online_expire = currentTime + 15 мин.
И потом в модуле вывода онлайн пользователей, выводим всех онлайн у кого online_expire < currentTime.
Т.е. почти тоже самое, что из предыдущего ответа, только без постоянного update в базу...