in generale non puoi fare affidamento sul client o sulle sessioni per capire chi è online.
Però puoi stabilire un certo tempo entro cui un utente è considerato online.

Quando un utente con un session id che recouperi con session_id() apre una pagina aggiorni sul db un campo timestamp last_online.
Quando il last_online < time()-TEMPO_PREDEFINITO condiseri l'utente offline.

Su altro non puoi basarti purtroppo. Esistono delle funzioni che sono in grado di intercettare la chiusura del browser ma non sono affidabili quindi rischi sempre di trovarti 2000000 utenti online quando non c'è nessuno