Il comune protocollo HTTP che conosciamo, di suo, non ha la possibilità di “tenere salvati” i dati trasmessi tra client (il pc di chi naviga nel sito, per intenderci) e server: una volta inviati e ricevuta la risposta, i dati vengono persi.
Fortunatamente sono state create le variabili di sessioni, cioè variabili capaci di tenere attivi gli scambi tra client e server fino alla chiusura del nostro browser.
Come funzionano? La prima volta che il client fa la chiamata al server viene generato un ID, che è unico e quindi identifica senza errori il mittente, e lo salva in un file all’interno del server stesso. A questo punto il motore php genera un cookie che sarà inviato al client e che conterrà quell’ID identificativo.
Il meccanismo è semplice: la prossima volta che si farà una chiamata allo stesso server, questo leggerà il contenuto del cookie e saprà a quale client appartiene.
L’identificativo è chiamato SID ed è una stringa di 32 caratteri alfanumerici.
L’esempio di uso più comune è la login. Una volta inserite username e password, i dati dell’utente saranno salvati in variabili di sessione: fino a quando queste variabili esistono, l’utente potrà continuare a navigare nell’area riservata. Alla chiusura del browser, le variabili si perdono (e in questo caso, perché l’utente al ritorno sia ancora loggato, si deve far uso di altri strumenti, come i cookies).
Un altro esempio è il carrello di un negozio online: una volta scelto un prodotto, questo va a finire nel carrello. L’utente potrà poi navigare nel sito in cerca di altri prodotti da aggiungere al carrello o eliminare elementi dal carrello stesso. Tutto questo può essere gestito dalle nostre variabili di sessione, che tengono tracce delle azioni dell’utente (aggiunta, eliminazione, ecc.).
Una nota: l’uso di variabili di sessione è molto utile in certi casi, ma non indispensabile e può essere sostituito da metodi diversi. Il carrello citato sopra, per esempio, può essere tranquillamente fatto appoggiandosi a un database e ai cookies; allo stesso modo, l’accesso a un’area riservata può essere gestito con cookies e variabili comuni. Il metodo di uso è, come sempre, personale, ma prima di decidere quale usare si deve conoscere i vari approcci.
Nel caso in cui stiate lavorando su un server vostro o in locale e avete la possibilità di mettere le mani sul php.ini
, potete configurare le variabili di sessioni a vostro piacimento. Questa trattazione non è nello scopo dell’articolo, ma chi fosse interessato può dare un’occhiata al php.ini
nella sezione “[Session]”.
Uso base della sessione – Apertura e creazione di variabili
Per aprire una sessione la sintassi è semplice:
1 2 3 |
<?php session_start(); ?> |
Questo codice va inserito a inizio di ogni pagina (non soltanto della pagina di index) e non deve contenere alcun codice precedente: anche mettere uno spazio prima dei tag php di apertura genererà un errore di warning. Questo è uno dei motivi per cui tendo a usare il meno possibile le sessioni (in alcuni casi l’impossibilità di inserire codice precedente obbliga a cercare vie traverse per gestire alcuni script particolari); in genere comunque non incontrerete problemi di sorta.
A questo punto avremo a disposizione una variabile superglobale chiamata $_SESSION
. Il suo funzionamento e uso è identico alle variabili $_GET
e $_POST
: si tratta quindi di un array a cui potremo assegnare gli indici a piacere.
Poniamo, per esempio, di provenire da una pagina di login, dove abbiamo inserito username (campo di input “username”) e password (campo di input “password”). All’invio del form avremo quindi a disposizione i valori $_POST['username']
e $_POST['password']
(quest’ultima possibilmente criptata).
Per fare in modo che le pagine del sito si portino sempre dietro queste due variabili, possiamo fare una semplice assegnazione:
1 2 3 4 5 |
<?php session_start(); $_SESSION['username']=$_POST['username']; $_SESSION['password']=$_POST['password']; ?> |
Nelle pagine successive potremmo richiamarle come delle comuni variabili, per esempio:
1 2 3 4 |
<?php session_start(); echo $_SESSION['username']; ?> |
In questo modo avremo sempre a disposizione, in ogni pagina, l’user e la password dell’utente e potremmo confrontarla con i valori che abbiamo per esempio nel database: se trova l’utente con quelle username e password, significa che questo è registrato e può continuare la navigazione.
Distruggere la sessione
Una volta aperta la sessione e create le variabili come viste sopra, in qualsiasi punto delle nostre pagine possiamo evocare la seguente funzione:
1 2 3 |
<?php session_destroy(); ?> |
In realtà, il comando non “annienta” la sessione: svuota soltanto il suo contenuto. Questo significa che la sessione sarà ancora attiva, ma l’array $_SESSION
sarà vuoto (e quindi non avremo più i valori di username e password a disposizione). L’effetto si avrà però soltanto all’evocazione del prossimo session_start()
(cioè, per esempio, quando cambieremo pagina).
Per svuotare immediatamente il $_SESSION
dobbiamo invece usare session_unset()
. In questo caso $_SESSION
sarà svuotato anche senza cambiare pagina.