Supponiamo che il nome della tabella del database per il cookie persistente sia pcookies con le seguenti colonne:
- id_cookie (CHAR)
- id_utente (INT)
- scadenza (DATETIME)
- sale (CHAR)
Passaggi per la creazione dei cookie:
- Dopo aver effettuato l'accesso, crea un record di cookie nel database con un ID univoco. Puoi generarlo da hash_hmac('sha512', $token, $salt) dove $token=uniqid($user_id, TRUE) e $salt=md5(mt_rand()).
- Memorizza 'user id', 'expiration time' e 'salt' insieme a 'cookie id' nel database.
- Memorizza 'cookie id' e 'token' nel cookie.
Passaggi di autenticazione:
- Se è stato trovato un cookie persistente, verifica prima se il record è disponibile nel database o meno.
- Se il record è disponibile, controlla se il cookie è scaduto o meno.
- Se il cookie non scade, convalida l'id del cookie con $cookie_id ==hash_hmac('sha512',$token_from_cookie,$salt_from_db).
- Una volta che il cookie è stato convalidato, eliminalo dal database e crea un nuovo cookie secondo i passaggi di creazione del cookie sopra indicati.
- Se il cookie viene rilevato come non valido, cancella il cookie dal dispositivo ed elimina tutti gli altri record di cookie dell'utente dal database, nota l'utilizzo di un tentativo di furto e procedi al processo di accesso manuale.
Note:
- Quando la sessione è disponibile, ignora il controllo dei cookie.
- Dopo il logout, cancella il cookie insieme al record del database.
- Non consentire mai agli utenti di eseguire richieste sensibili come la modifica della password o visualizzare le informazioni sulla carta di credito da un cookie di accesso persistente. Richiama la password per accedere e aggiungi un flag nella sessione per consentire tutte le operazioni successive.