Du speicherst einfach, wann der Benutzer die letzte Seite angefordert hat.
Alle Benutzer, die in den letzten 4 Minuten eine Seite angeforodert haben, sind online.
So in etwa. Du hast immer eine Toleranzzeit, die du geben musst. Wählst du diese zu kurz, werden online-User offline angezeigt. Zu lang, und offline-User werden online gezeigt.
Da HTTP ein Verbindungsloses Protokoll ist, kannst du den genauen Zetpunkt, wann ein Benutzer den Browser zu macht, nicht festmachen.
(Evtl. könntest du da n paar Sachen mit Javaascript machen, aber so richtig schön ist das immernoch nicht ...)
Edit:
Javascript könnte dir insoweit helfen, dass du bei einer Karaanzzeit von bspw. 3 Minuten alle 2,5 Minuten nen Ajax-Request sendest, dass der Benutzer immernoch online ist.
Abmelden im OnClose-Ereignis ist beim Tabbed-Browsing suboptimal