Salve a tutti.
Sto sviluppando un'applicazione web a cui hanno accesso più utenti, anche simultaneamente: quello che voglio impedire è che un utente possa collegarsi due o più volte dalla stessa macchina, o anche da macchine differenti.
Ho fatto un po' di ricerche su Internet e devo dire che è un problema abbastanza sentito, anche se non comunissimo. Ho visto anche le relative soluzioni, ma nessuna di esse mi soddisfava pienamente quindi ho pensato di farne una mia ispirandomi a quanto avevo già visto.
La mia idea fa uso del database, in particolare di una tabella che chiamo "Sessioni".
Tale tabella è composta dai seguenti campi: Username e Timestamp.
Username contiene lo username dell'utente loggato e timestamp l'indicazione temporale dell'ultima azione da lui fatta nel sistema: se non compie azioni per più di cinque minuti la sessione la considero scaduta.
Per impedire il login multiplo mi è venuta in mente questa serie di controlli:
codice:
1) L'utente immette i suoi dati ed avvia la procedura di login.
2) Dopo la procedura di login, e in tutte le pagine dell'applicazione web, avvio una query che cancella tutte le sessioni più vecchie di cinque minuti dal momento attuale: "DELETE FROM Sessioni WHERE Timestamp < \"" . time() - 300 . "\";".
3) Avvio una query sul database del tipo "SELECT COUNT(Username) FROM Sessioni WHERE Username = \"{$Username}\" AND Timestamp >= \"" . time() - 300 . "\";"
- Se la query mi restituisce uno vuol dire che l'utente è già collegato e quindi gli impedisco il login facendolo tornare alla pagina di login.
- Se la query mi restituisce zero vuol dire che l'utente non ha già loggato e quindi registro la sua sessione nel database e poi lo faccio accedere all'applicazione normalmente.
4) Se un utente loggato accede a qualsiasi parte del sistema quando la sua sessione è scaduta lo ridirigo alla pagina di login.
Che ne dite, potrebbe funzionare così? Che cambiamenti mi consigliate di apportare?