По-моему легче всего хранить информацию о последнем обновлением странички каждого пользователя в базе данных и если страничка у этого пользователя не обновлялась, к примеру, 30 секунд, писать, что пользователь "отошел в мир иной".
Правда тогда нужно будет во время каждого релоада чата делать запрос в БД, который будет проверять всех юзеров на "живучесть", а если чат популярный, то это приличная нагрузка.