Cara saya melakukannya adalah secara berkala melakukan ping ke handler khusus menggunakan AJAX (sekali dalam 30 detik). Itu banyak sekali permintaan, jadi alih-alih memperbarui tabel pengguna online setiap kali dengan kunjungan terakhir, saya memperbarui memcache. Saya hanya memperbarui catatan database ketika 5 menit di belakang catatan memcache (Anda dapat memilih penundaan yang lebih besar atau lebih kecil tergantung pada beban). Kemudian tugas cron menghapus catatan basi dari tabel pengguna online.
Untuk memeriksa apakah pengguna tertentu sedang online, saya cukup memeriksa catatan memcache-nya. Kesalahan tidak pernah lebih dari 30 detik. Basis data tidak pernah lebih dari 5 menit, jadi hasil dari basis data juga cukup akurat.
Saya juga menggunakan permintaan berkala ini untuk mendorong acara ke pengguna.