Le sessioni sono un meccanismo alternativo ai cookie per memorizzare informazioni relative all'utente. A differenza dei cookie che vengono salvati sul client, ovvero sul dispositivo dell'utente tramite browser, la sessione memorizza le informazioni sul server che ospita l'applicazione.
Di default la sessione salva i dati in file testuali salvati nel file system del server. È possibile, però, modificare tale configurazione in maniera da salvarle anche su database, Memcache, Redis, e così via. Tutte alternative molto utili quando si lavora, ad esempio, con applicazioni che risiedono in server differenti.
L'associazione utente/sessione avviene nella maggior parte dei casi attraverso un cookie che contiene l'id della sessione.
Un altro metodo con cui è possibile accedere alla sessione consiste nel passare come parametro in query string il PHPSESSID
, ad esempio:
http://test.com/?PHPSESSID=123nd12312
Questa modalità è del tutto sconsigliata per motivi di sicurezza, tanto che in molte configurazioni PHP è disattivata del tutto.
La durata di una sessione, così come avviene per i cookie, può essere decisa dallo sviluppatore. Se non diversamente specificato essa scadrà alla chiusura del browser.
L'uso più comune che viene fatto di una sessione è quello di implementare un sistema di autenticazione su un sito Web. Una volta verificato che le credenziali di accesso sono valide, infatti, è utile memorizzare le informazioni dell'utente su una sessione così da non doverle ricaricare da database all'apertura di ogni pagina.
Inizializzare una sessione
Una sessione, per poter essere utilizzata, ha bisogno di essere inizializzata. Come per i cookie è necessario inizializzarla prima che qualsiasi output sia già stato inviato alla pagina.
La funzione per inizializzare una sessione si chiama session_start()
. Essa prende in ingresso un array di opzioni che, se impostate, vanno a sovrascrivere quelle di default impostate nel php.ini
. Per sapere quali sono tali impostazioni si può fare riferimento alla documentazione ufficiale.
<?php
session_start();
//sessione inizializzata
Una volta inizializzata la sessione possiamo accedere ai dati relativi e, di conseguenza, poterne aggiungere altri. Se non abbiamo modificato la configurazione di PHP e facciamo un dump dell'array $_COOKIE
, noteremo che è stata creata una entry chiamata PHPSESSID
che contiene l'id della sessione appena generata. Questo a conferma di quanto detto in precedenza riguardo all'associazione utente/sessione.
Accedere ai dati di una sessione
Una volta inizializzata una sessione, le informazioni sono salvate all'interno dell'array $_SESSION
. Supponiamo quindi di voler memorizzare il nome dell'utente in sessione, possiamo creare una chiave nell'array:
<?php
session_start();
$_SESSION['name'] = 'Simone';
echo $_SESSION['name']; //stamperà il nome in sessione
Come per i cookie, è possibile rimuovere una proprietà dalla sessione attraverso l'unset su di essa:
<?php
session_start();
$_SESSION['name'] = 'Simone';
unset($_SESSION['name']);
Se volessimo rimuovere tutte le variabili in sessione, invece, possiamo utilizzare la funzione apposita:
<?php
session_start();
$_SESSION['name'] = 'Simone';
session_unset(); //svuota tutte le variabili di sessione
Distruggere una sessione
Una volta che la sessione non è più necessaria, ad esempio al logout di un utente, possiamo distruggerla attraverso la funzione session_destroy()
:
<?php
session_start();
$_SESSION['name'] = 'Simone';
session_destroy(); //a questo punto la sessione non è più disponibile per l'utente
Mantenere la sessione tra diversi file
Una sessione inizializzata in un file, ad esempio login.php
, non viene mantenuta automaticamente se accediamo ad un'altra pagina. Ragione per cui all'inizio di ogni file che utilizziamo è necessario richiamare session_start()
che, nel caso in cui la sessione sia già stata creata, la recupera con i dati salvati in precedenza.