L'ultimo articolo scritto su Sir Bit risale a marzo 2014. La versione che state visitando è un archivio: le pagine sono accessibili come sempre e gli autori potrebbero rispondere ai commenti, ma non saranno inseriti dei nuovi articoli. Visita questa pagina per i dettagli.

PHP – Cosa sono le variabili di sessione e come si usano

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.

Etichette
Etichette:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.