Introduzione

In questo articolo si descrive quello che è una sessione, come crearla, utilizzarla e distruggerla in PHP. Si spiega anche un paio di consigli per garantirne la sicurezza.

$_SESSION

$_SESSION è un array c le informazioni da tutte le pagine richieste che un utente fa durante la sua visita a un sito o da un’applicazione web. Un modo fondamentale per spiegare cos’è una sessione è come è immaginando il seguente scenario:
Quando si lavora con un’applicazione, la si apre, si apportano alcune modifiche, e poi la si chiude.
Questo è il compito della sessione nella sua forma più semplice.
Lo scenario di esempio ricorda il processo che avviene quando si utilizza un sistema di login. Il processo può essere estremamente complicato o incredibilmente semplice, fino a quando c’è un valore che persiste tra le richieste. Le informazioni memorizzate nella sessione possono essere recuperate in qualsiasi momento mentre la sessione è aperta.
Anche se ci sono molti utenti che accedono al sito allo stesso tempo, ognuno di loro avrà la sua propria sessione e grazie agli ID univoci assegnati e gestiti da PHP, ogni sessione permette a ciascun utente di avere a dispozione le informazioni solo a se stesso. Le informazioni di sessione vengono memorizzati sul server anziché sul computer dell’utente (così come vengono memorizzati dai cookies), il che rende le sessioni più sicure dei cookies tradizionali per passare informazioni tra le pagine richieste.
Usando le sessioni
Prima di poter memorizzare le informazioni in una sessione è necessario avviare il gestore di sessioni di PHP. Questo viene fatto all’inizio del vostro codice PHP, e deve essere fatto prima di qualsiasi testo, HTML o JavaScript che venga inviato al browser. Per avviare la sessione, si chiama la funzione session_start() all’inizio del file:
Copia codice

<?php
// partenza del motore!
session_start();
// dati della sessione
$_SESSION["username"] = "Pippo";
?>
session_start() inizia la sessione tra l’utente e il server, e permette di memorizzare i valori nella variabile $_SESSION per essere accessibile da altri script in seguito.
Nel tuo secondo file, si chiama session_start() ancora una volta e la sessione continua; quindi è possibile recuperare i valori da $_SESSION.
Copia codice

<?php
// continua la sessione
session_start();
// recupera i dati della sessione
echo "Username = " . $_SESSION["username"];
?>
Questo esempio è una dimostrazione di base che spiega come archiviare e di recuperare i dati in una sessione. Nel primo script, il valore “Pippo” è stato associato alla chiave “username” nell’array $_SESSION. Nel secondo script, si recupera l’informazione che è stata richiesta indietro attraverso l’array $_SESSION dalla sua chiave associativa. $_SESSION consente di archiviare e recuperare le informazioni attraverso le richieste di pagine di sessione nella navigazione attiva di un utente.
Finalizzare una sessione
È così importante come lo è quello di iniziare una sessione. Anche se una sessione è solo un modo per memorizzare temporaneamente i dati, è molto importante pulire tutto dopo il suo uso in modo da garantire la massima sicurezza quando si tratta di informazioni potenzialmente sensibili. È anche una buona pratica per evitare di avere una quantità enorme di dati di sessione sul server.
Per eliminare un singolo valore di sessione utilizzare la funzione unset():
Copia codice

<?php
session_start();
// eliminare il valore di username
unset($_SESSION["username"]);
?>
Per eliminare tutti i valori di sessione, è possibile utilizzare la funzione session_unset():
Copia codice

<?php
session_start();
// eliminare tutti i valori della sessione
session_unset();
?>
Entrambi gli esempi riguardano solo i dati memorizzati nella sessione, non la sessione stessa. È ancora possibile memorizzare altri valori nella variabile $_SESSION dopo averlo chiamato. Se si desidera interrompere completamente la sessione, per esempio quando un utente si disconnette, si utilizza la funzione session_destroy().
Copia codice

<?php
session_start();
// termina al sessione
session_destroy();
?>
È consigliato che quando si è sicuri che non è più necessaria la sessione di distruggerla utilizzando la funzione session_destroy(), piuttosto che eliminare solo i suoi valori con la funzione session_unset(). Se si eliminano solo i valori, la stessa sessione è ancora attiva ed è possibile iniettare del codice malizioso in quelle sessioni con dei valori manipolati.

Sono queste le sessioni in poche parole e la sua la funzionalità è molto semplice ma molto potente all’interno di PHP, che fornisce un’elegante soluzione al problema del passaggio dei dati tra le pagine web.