Gestire le sessioni in PHP

10 febbraio 2017

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.

Tutte le lezioni

1 ... 34 35 36 ... 59

Se vuoi aggiornamenti su Gestire le sessioni in PHP inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Gestire le sessioni in PHP

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy