Attendi ...

La funzione ricordami in PHP

La maggior parte dei siti web offre un sistema di autenticazione degli utenti, allo scopo di offrire servizi ed informazioni personalizzate su base utente. Per implementare un buon sistema ti autenticazione su un sito web occorre sviluppare alcune funzionalità di base, che sono

  • Protezione delle risorse che si occupano dell'autenticazione (o contengono i parametri che governano il processo di autenticazione), che non devono essere pubblicamente raggiungibili
  • Offrire un set di pagine per gestire l'autenticazione, in particolare: login, logout, benvenuto ed errore: quest'ultima è la pagina che viene caricata se l'utente inserisce dei dati errati, quindi dovrebbe rimandare alla pagina di login
  • Riconoscere gli utenti in modo sicuro, memorizzando le password nel database
  • Inserire il controllo dell'avvenuta autenticazione in ogni pagina del sito (tranne quelle pubbliche)
  • Permettere all'utente di spuntare la casella ricordami per evitare di inserire username e password ogni volta che torna sul nostro sito

Abbiamo già visto come soddisfare questi requisiti nell'articolo Autenticare gli utenti in PHP, ad eccezione della funzionalità “ricordami”. Oggi vedremo un modo di ricordare gli utenti in modo semplice ed efficace, rimanendo sempre dell'ambito del PHP. Cercheremo anche di discutere e motivare le scelte che ci porteranno alla soluzione finale.

Il problema

Assumendo di autenticare gli utenti come nell'esempio già visto, ad un certo punto la nostra pagina di autenticazione dovrebbe contenere un codice simile a quello qui sotto

if ($row['login']) {

$_SESSION['id'] = $row['codice'] ;

$_SESSION['rememberMe'] = $_POST['rememberMe'] ;

ecc...

dove stiamo considerando il caso in cui la casellina “ricordami” è un normalissimo input di una form HTML, che l'utente ha inviato mediante una richiesta HTTP POST. La pagina di login dovrebbe quindi contenere una riga come questa

<input name="rememberMe" id="rememberMe" type="checkbox"

checked="checked" value="1"/>

Fin qui sembra andare tutto liscio. L'utente può spuntare o non spuntare la casella “ricordami”, e noi ci occupiamo di memorizzare la sua scelta nella variabile di sessione omonima. C'è però un problema: se la sessione HTTP viene configurata per restare la stessa anche quando l'utente chiude il browser, al prossimo collegamento (con lo stesso ID di sessione) noi potremmo pensare di controllare la variabile $_SESSION['rememberMe'] per capire se dobbiamo riconoscere l'utente o no. Se questa variabile è off, ovvero l'utente non voleva essere ricordato, dobbiamo accertarci di distruggere la sessione e dirigere l'utente verso la pagina di login. In altre parole potremmo pensare di inserire il controllo

if ($_SESSION['id'] && !$_SESSION['rememberMe']) {

$_SESSION = array();

session_destroy();

}

Ma questo è sbagliato! Un controllo del genere distruggerà la sessione tutte le volte che un utente decide di effettuare il login senza spuntare la casella “ricordami”. Il codice qui sopra rende obbligatorio usare la funzione "ricordami" per potersi autenticare...

La soluzione

Quello che ci serve è uno stratagemma per distinguere tra quattro possibili situazioni:

  • Utente loggato nella sessione CORRENTE senza opzione “ricordami”
  • Utente loggato nella sessione PRECEDENTE senza opzione “ricordami”
  • Utente loggato nella sessione CORRENTE con opzione “ricordami”
  • Utente loggato nella sessione PRECEDENTE con opzione “ricordami”

Adesso che abbiamo ben schematizzato i possibili scenari d'uso, diventa più facile capire quando dobbiamo inserire il controllo per resettare la sessione HTTP. Dei quattro casi qui sopra, quello incriminato è il secondo: l'utente si era loggato la volta scorsa, senza spuntare la casellina “ricordami”, quindi si aspetta di non essere riconosciuto. Per identificare questa situazione aggiungiamo un cookie “provvisorio” al momento dell'autenticazione. Il nostro codice di login diventa

 if ($row['login']) {

$_SESSION['id'] = $row['codice'] ;

$_SESSION['rememberMe'] = $_POST['rememberMe'] ;

setcookie('my_remember',$_POST['rememberMe'],0, "/");

ecc...

Si tratta di un cookie che “morirà” quando l'utente chiuderà il browser, e serve unicamente a farci distinguere il primo controllo da quelli successivi, senza andare ad accorciare la vita della sessione HTTP, che in questo modo può rimanere la stessa collegamento dopo collegamento.

Il controllo sulla necessità di distruggere la sessione sarà qualcosa del genere:

 if ($_SESSION['id'] && !isset($_COOKIE['my_remember'])

&& !$_SESSION['rememberMe']) {

$_SESSION = array();

session_destroy();

}

in questo modo distruggeremo la sessione solamente se questa è un retaggio del collegamento precedente (ho ancora una variabile $_SESSION['id']), l'utente non si è appena autenticato (non abbiamo il cookie my_remember) e la volta precedente l'utente non ha scelto l'opzione ricordami (la variabile $_SESSION['rememberMe']) è settata a zero).

La scelta di usare il cookie per risolvere il problema non è l'unica possibile, ma è semplice ed efficace: provare per credere!

Pubblicato il Aggiornato il

Ti potrebbero interessare

Hosting Condiviso VPS Cloud WordPress

Hosting condiviso, VPS o Cloud: quando WordPress deve crescere

Un sito WordPress può iniziare la propria attività su un normale piano di hosting condiviso e funzionare correttamente per molto tempo. Con l'aumento del traffico, dei contenuti, dei plugin o delle funzionalità, però, le esigenze tecniche possono cambiare.

Un sito aziendale che inizialmente pubblicava poche pagine può diventare un portale ricco di ...

13.07.2026
Dettagli

Come proteggere WordPress da attacchi automatici

Proteggere WordPress dagli attacchi automatici: perché è importante

WordPress è una delle piattaforme più utilizzate al mondo per realizzare siti web, blog aziendali ed eCommerce. Proprio per questa diffusione, è anche uno dei bersagli più frequenti di bot automatici, tentativi di login, scansioni alla ricerca di vulnerabilità, malware e attacchi contro plugin non aggiornati.

Molti attacchi non sono mirati ...

06.07.2026
Dettagli

Hosting WordPress Italia vs Estero

Hosting WordPress in Italia vs estero: perché la scelta conta

Quando si sceglie un servizio di hosting WordPress, il prezzo è spesso il primo elemento preso in considerazione. Tuttavia, per un sito aziendale, un eCommerce o un progetto professionale, la posizione dell'infrastruttura può incidere su aspetti molto concreti: prestazioni, latenza, supporto tecnico, sicurezza, GDPR e gestione operativa.

La domanda quindi ...

29.06.2026
Dettagli