Io intendo questo (ipotizzando che tutti abbiano fatto un accesso contemporaneo e che si sia in una LAN interna, per l'esterno l'IP potrebbe essere un dato non valido):
- utente A -> accesso da PC con IP *.1 -> registro un cookie sul client con valore "Az" e salvo le stesse informazioni sul DB (IP, valore cookie, data/ora di accesso, data di aggiornamento del record - valorizzata con NOW() al momento dell'insert);
- utente B -> accesso da smartphone con IP *.2 -> registro un cookie sul client con valore "Bz" e salvo le stesse informazioni sul DB (IP, valore cookie, data/ora di accesso, data di aggiornamento del record - valorizzata con NOW() al momento dell'insert);
- utente A -> accesso da tablet con IP *.3 -> registro un cookie sul client con valore "Cz" e salvo le stesse informazioni sul DB (IP, valore cookie, data/ora di accesso, data di aggiornamento del record - valorizzata con NOW() al momento dell'insert);
- utente A -> dopo 3 minuti fa un'operazione -> cerco il valore del suo cookie nel DB, controllo la congruenza delle informazioni (il suo IP è lo stesso di prima?), aggiorno la data di aggiornamento del suo record e controllo che gli altri client siano ancora da ritenere attivi (query di delete su record con data di aggiornamento <= NOW() + 5 minuti) - non dovrò fare nulla, dato che sono passati tre minuti;
- utente A -> dopo 2,5 minuti fa un'altra operazione -> cerco il valore del suo cookie nel DB, controllo la congruenza delle informazioni (il suo IP è lo stesso di prima?), aggiorno la data di aggiornamento del suo record e controllo che gli altri client siano ancora da ritenere attivi (query di delete su record con data di aggiornamento <= NOW() + 5 minuti) - dovrò cancellare i due record relativi a utente A da tablet e utente B da smartphone;
- utente B -> dopo la cancellazione del suo record fa un'operazione -> cerco il valore del suo cookie nel DB, non lo trovo perché l'ho cancellato prima e lo forzo a rifare il login, registrando nuovamente un record per il suo client con il nuovo valore del cookie che gli ho impostato sulla macchina.
PS: il cracker lo dovresti fregare comunque, dato che la stringa che registri sul cookie sarà randomica e lui dovrebbe avere accesso ad altro dispositivo con cookie valido e ancora presente sul DB