Salve,

al momento gestisco gli utenti online con due tabelle. La prima è quella degli utenti registrati e contiene il campo (userOnline = 1 utenteLoggato 0 utenteNonLoggato) mentre la seconda è quella che registra tutti gli accessi al sito.

La visualizzazione degli utenti (divisi tra registrati e non registrati) è fatta in questo modo:

1) query sulla tabella user per determinare quanti utenti hanno il flag userOnline impostato a 1
2) query sulla tabella che registra gli accessi per determinare quanti utenti sono sul sito
3) Creazione della var $userGuest sottraendo dal numero totale il numero dei registrati
4) Stampa a video delle due variabili.

La zappatura dai database degli utenti guest il cui orario di connessione è obsoleto avviene a mezzo scritp anche se non è possibile determinare al centesimo di secondo quando effettivamente viene chiuso il browser o quando viene digitato l'indirizzo di un altro sito mentre per gli utenti registrati avviene in uno di questi due modi:

1) Update dello stato userOnline da 1 a 0 quando viene premuto il pulsante logoff
2) Quando la sessione associata al utente in modo del tutto empirico viene ritenuta scaduta (ammetto che questa è una parte del sito che non è mai stata curata più di tanto anche se ora la volevo migliorare.)

Considerando questo la domande che faccio sono sostanzialmente 2:

1) Non sarebbe più conveniente, il database non l'ho progettato io e non ho assolutamente idea del perchè non solo di questa scelta ma anche di altre, spostare il campo userOnline della tabella users nella tabella che controlla gli accessi al sito e associargli anche una bella timestamp in modo da zapparlo via sicuramente in modo non preciso al centesimo ma sicuramente migliore di quel accrocchio di sessioni con cui ho a che fare ora ?

2) Esiste (anche in ajax o js) il modo per stabilire il momento esatto in cui il browser viene chiuso o digitato un altro url e associargli un evento come ad esempio l'update di un campo di una tabella o la cancellazione di un record ?

Grazie per le risposte.