Způsob, jakým to dělám, je periodicky pingovat speciální handler pomocí AJAX (jednou za 30 sekund). To je spousta požadavků, takže místo aktualizace tabulky online uživatelů pokaždé s poslední návštěvou aktualizuji memcache. Záznam databáze aktualizuji pouze tehdy, když je 5 minut za záznamem memcache (můžete zvolit větší nebo menší zpoždění v závislosti na zatížení). Potom úloha cron odstraní zastaralé záznamy z online tabulky uživatelů.
Pro kontrolu, zda je konkrétní uživatel online, jednoduše zkontroluji jeho záznam memcache. Chyba není nikdy delší než 30 sekund. Databáze není nikdy více než 5 minut pozadu, takže výsledky z databáze jsou také docela přesné.
Tyto pravidelné požadavky také používám k odesílání událostí uživateli.