Надуманная проблема. Простой запрос при каждом открытии страницы чата 2 запроса:
1. mysql_query("UPDATE `users` SET `online`=1,`lasttime`=".time()." WHERE `userid`=".$userid);
2. mysql_query("UPDATE `users` SET `online`=0 WHERE `lasttime` + ".$timeout." < ".time());
Базу они нагружают несильно, если, конечно, в чате не 1000+ пользователей, обновляющих страницу раз в 0.1с...
Да и обсасывалась тема неоднократно - видимо, поиск лень помучать, лучше нас.