Ora che sappiamo come gestire i dati in un database MySQL, passiamo a vedere come gestire le sessioni ed i cookie in PHP. Penso che tutti già sapete cosa siano i coockie, se non ne avete idea ho creato tempo fa un articolo che ne tratta in maniera molto semplice. Quando andiamo a visitare un’industria all’entrata qualcuno ci prende i dati e ci attacca un cartellino al camice, una sessione ha un funzionamento analogo, difatti viene aperta all’entrata dopo essersi fatti riconoscere e viene chiusa all’uscita. Capite bene che è alla base del funzionamento del login utente.
Quando facciamo il classico login, ci viene chiesto di inserire nome utente e password, se i dati sono già presenti in un database e siamo riconosciuti ci è permesso di fare delle cose che utenti normali non possono. Dal punto di vista del programmatore le operazioni da implementare sono queste:
- Preparare una pagina di login con richiesta di nome utente e password, nella quale è presente una form che ci consente di trasferire i dati inseriti ad una pagina di destinazione.
- Nella pagina di destinazione si effettuerà il redirect alla pagina di errore in caso di fallimento.
- In caso di esito positivo si aprirà una nuova sessione e si inserirà nella variabile della stessa, un codice che ci consentirà di riconoscere l’utente, magari proprio tramite il suo ID.
- Nelle pagine successive, un utente non riconosciuto, quindi con la variabile sessione nulla, subirà un redirect alla pagina di errore.
Capite bene che le sessioni sono molto importanti per riconoscere un utente e consentirgli di fare operazioni che ad altri sono proibite. Alla chiusura della sessione, l’utente deve di nuovo identificarsi con un altro login, la sessione termina quando l’utente chiude il suo browser, non solo un singolo tab nei browser attuali. In php per aprire una sessione si deve inizializzarla con la funzione session_start() ed inserire il valore della variabile di sessione $_SESSION[‘mia_variabile’].
Le sessioni sono molto comode da utilizzare e soprattutto molto semplici, ma hanno una limitazione. Mettiamo che voglia che il mio utente abbia la possibilità di entrare anche il giorno dopo senza fare la login, come posso fare se ogni volta che chiude il browser la sessione viene cancellata? Utiliziamo in questo caso i cookie ( biscotti ) che vengono attaccati al browser del visitatore per un tempo che decidiamo noi e quindi anche una settimana o anche un mese o perfino 2 anni. C’è da dire però che più tempo si allunga la vita del cookie e più risulta insicuro, perché basta che un altro programmatore riconosca la nostra variabile cookie che consentirà, a chi vuole lui, di accedere al nostro sito. Per fortuna in php ci sono degli argomenti da dare che rendono la gestione dei cookie molto più sicura. Per inserire un cookie nel browser del nostro visitatore occorre utilizzare la funzione bool setcookie(string $name, string $value, int expire = 0, string $path, string $domain, bool $secure = false, bool $httponly = false). L’unico argomento obbligatorio è il primo, gli altri sono facoltativi. Vediamone il significato di ognuno:
- $name – il nome del cookie che dovrebbe essere sempre univoco per ogni utilizzazione
- $value – il valore del cookie, che è salvato nella variabile $_COOKIE[‘nome_cookie’]
- expire – valore intero che indica il tempo di validità del cookie espresso in unix timestamp
- $path – il percorso nel server nel quale il cookie ha validità
- $domain – il dominio nel quale il cookie ha validità
- $secure – valore boleano che indica se occorre utilizzare il protocollo https per comunicare con il client
- $httponly – valore boleano che indica se il cookie è visibile solo su protocollo HTTP e non è accessibile da linguaggi quali il javascript
Ricapitolando, per inserire un cookie dobbiamo utilizzare la funzione setcookie e dare un nome univoco, un valore per riconoscere il nostro utente, una data di fine dopo la quale il cookie verrà cancellato e gli altri argomenti mano a mano che vogliamo rendere più sicuro il sistema delle autorizzazioni nel nostro sito web.
Nella prossima lezione vi spiegherò un esempio concreto con codice sorgente per creare una finestra di login nella quale andiamo a verificare la presenza di un utente ed un paio di pagine che verrano visitate solo se si è autenticati.