io avevo la tua stessa necessità..
e l'ho risolta impostando all'utente un tempo di inattività che gli concedo oltre il quale lo considero offline...
ovviamente ogni volta che compie un'azione nel forum gli si deve incrementare tale tempo..

ovvero succede questo:

1)io gli imposto nel campo tempo di on-line 30 minuti (time()+60+30)

2)ogni volta che fa un'azione gli inceremento questo tempo(time()+60*30)

3)se rimane inattivo per più di 30 minuti diventa offline ma non appena ricomepie un'azione lo rimetto tra gli online(quindi ogni qual volta che gli incrementi il tempo devi controllare se è ancora on-line o offline.

4)se rimane inattivo per più di 30 minuti e un altro utente si connette o compie un'azione nel forum, quest'ultimo me lo cancella dalla tabella degli online con una funzione (del_offline) che faccio eseguire ad ogni utente che si connette o che compie un'azione nel mio form...così ho la tabella on-line sempre aggiornata..

spero di essere stato chiaro