Se ho capito bene cosa vuoi ottenere io userei una tabella di questo tipo

utenti_online
-------------
id_sessione (chiave primaria)
ultimo_accesso

In php fissi una scadenza in secondi

session_start() ;
$scadenza = 120 ;
$id_sess= session_id() ;

Poi ad ogni accesso dell'utente fai

SELECT UNIX_TIMESTAMP(ultimo_accesso)) AS lastIn FROM ciccio WHERE id_sessione = $id_sess

così verifichi l'ultimo accesso, prelevi il risultato dal db e poi

if( (time() - $risultatoQuery) > $scadenza )
{

session_destroy() ;
//DELETE FROM ciccio WHERE session_id=$id_sess

}
else
{

//aggiorno l'ultimo accesso e mantengo l'utente valido
//UPDATE ciccio SET ultimo_accesso= NOW() WHERE session_id=$id_sess

}

Per sapere il numero di utenti online fai un count(*)

Ovviamente se usi direttamente le sessioni su db fai prima.

In ogni caso non si può capire con precisione esatta quando l'utente chiude il browser perchè essendo la chiusura del browser un evento client non lo si può rilevare lato-server