Allora.
Io di solito faccio così: al momento del login dell'utente, creo un identificativo univoco.
Che ne so, prendi il microtime del login, lo trasformi in MD5 e magari prendi solo 10/20 caratteri della stringa.
Quel valore lo salvi nella sessione e nel DB.
La query di inserimento dei vari dati di logout non la farai per il nome utente, ma per il codice indentificativo.
Per la seconda domanda, invece, ti devi inventare un mostro tecnologico.![]()
Il file di sessione, nella cartella del server, viene cancellato (o comunque azzerato) dopo un periodo X in cui non ci sono interazioni tra browser a cui è collegata quella sessione e server.
Quindi da quel punto di vista sei a posto.
Puoi fare che ad ogni accesso utente, puoi andare a controllare se è rimasta una sessione aperta (fai una select per nome utente, stavolta) e controlli solo l'ultimo valore inserito.
Se la colonna del logout è vuota puoi impostare un valore fisso prima di creare il nuovo record di accesso (tipo 60 minuti dalla data di accesso), oppure lasciare il campo vuoto.
Tanto, sapere che l'utente non si è scollegato può anche non servirti molto.
Magari potresti usare questa informazione, per lanciare un alert ed insegnare al tuo utente sbadato di fare il logout a dovere la volta successiva.
Che ne so un alert in cui scrivi: "L'ultima volta che hai fatto l'accesso al sito, ti sei scollegato senza effettuare il logout. Cortesemente, ogni volta che esci dal sito, clikka il bottone di logout".
Spero di essermi spiegato.
![]()