il concetto è questo:
se scrivi su un cookie l'id dell'utente nel database... quando verifichi che non è loggato, prima di mostrargli il form di login verifichi se ha il coookie.. se ce l'ha, dall'id lo riconosci senza alcun dubbio...
e fin qui dovrebbe essere chiaro...
il problema qual è? che se io utente apro il cookie e ci vedo scritto dentro il mio id.. posso benissimo cambiarlo a caso o mettendo l'id di un altro.. e farmi riconoscere al suo posto... chiaro?
Per evitare questo potrei mettere sul cookie:
id|md5
dove l'md5 è una funzione di hash che data una stringa qualsiasi ne genera una di 32 caratteri... insomma.. difficile da indovinare.. a stringhe simili corrispondono hash diversissimi....
chiaramente questo non basta ancora.. prchè chiunque è in grado di fare un md5... quindi se io utente con id 6 mi trovo sul cookie l'id 6 e l'md5... posso benissimo metterci l'id 8 e l'md5 dell'id 8....
e allora che ci metto? devo metterci qualcosa che conosco solo io.. ovvero una password.. in pratica concateno all'id una mia password e poi faccio l'md5... insomma:
Codice PHP:
if(isset($_POST['ricorda'])) {
$md5 = md5("{$uid}{$miapwd}");
setcookie('login',"{$uid}|$md5",time()+60*60*24*365);
}
Questo codice verifica se è stata spuntata la tipica casellina per il riconoscimento automatico al proprio accesso... in quel caso fa l'md5 come ti ho detto io.. poi setta un cookie chiamato "login", ci scrive la stringa id|md5, e gli da un anno come scadenza
in fase di login verifichi così:
Codice PHP:
//se non c'è una sessione autenticata e c'è il cookie
if (!isset($_SESSION['uid']) && isset($_COOKIE['login']))
{
//verifico validità del cookie e allora autentica sessione
list($uid,$md5) = explode(':',$_COOKIE['login']);
if($md5 != md5("{$uid}{$miapwd}"))
{
print_message("che stai a fa????");
exit;
}
else //l'utente è correttamente riconosciuto e attivo la sessione senza mostrare il form
}
spero sia chiaro.. 