Lezione Precedente | Elenco Lezioni | Lezione Successiva |
Le variabili che vengono utilizzate in uno script PHP hanno validità ristretta ad una singola esecuzione della pagina. Una volta terminato lo script, tutte le variabili utilizzate vengono dimenticate. A questa regola, tuttavia, fa eccezione una variabile, l'array associativo $_SESSION
. Tutte le modifiche apportate alla variabile $_SESSION sono valide non solo per una determinata esecuzione di uno script, ma per tutti le esecuzioni di tutti gli script che fanno parte di una stessa sessione.
In PHP con il termine sessione si indica un insieme di variabili (tutte facenti parte dell'array associativo $_SESSION) che preservano il loro valore da una pagina ad un altra. In un certo momento ci possono essere più sessioni attive contemporaneamente, ad esempio quando lo stesso sito è consultato da più utenti.
Il PHP mette a disposizione i seguenti comandi di base per la manipolazione delle sessioni:
bool session_start (void)
: recupera la sessione corrente se esiste o ne crea una nuova. Restituisce sempre true.
bool session_destroy (void)
: distrugge tutti i dati relativi alla sessione corrente. Restitusce true se l'operazione ha successo, false altrimenti.
Per poter accedere alle variabili di sessione, uno script PHP deve innanzitutto recuperare la sessione corrente con session_start
. Ad esempio supponiamo di avere il seguente script:
<?php session_start(); ?> <HTML> <HEAD> <TITLE> Prova sessione </TITLE> </HEAD> <?php if (isset($_SESSION["count"])) { echo "Hai visitato questa pagina $_SESSION[count] volte"; $_SESSION["count"]++; } else { echo "Sei un nuovo utente"; $_SESSION["count"]=1; } ?> </BODY> </HTML>
Ogni volta che ci colleghiamo alla pagina web generata da questo script, ci verrà restituito un numero progressivo diverso. Questo perché lo script riconosce il primo accesso da parte di un utente come l'inizio di una sessione di lavoro e mantiene traccia del numero di volte che la pagina è stata acceduta, durante la sessione, nella variabile $_SESSION["count"]
. Notare che non si tratta di un indice globale: persone diverse che si collegano alla stessa macchina avranno risultati diversi!!!
Ma come fa il sistema a riconoscere un accesso da parte di un utente da un accesso da parte di un altro utente. Tutto si basa sui cookie del browser. I cookie sono delle informazioni che il server web può depositare nel computer client dell'utente per accedervi poi in un momento successivo. Ogni cookie ha vari attributi, tra cui un nome e una informazione correlata. Con la funzione session_start()
il PHP controlla se esiste nel client un cookie con nome PHPSESSID
e se sì carica l'informazione correlata. Questa è un codice numerico esadecimale del tipo d198667a6cb5ff11f761934c59534398
che viene usato internamente da PHP per distinguere una sessione dall'altra. Ad ogni sessione è associato un array associativo $_SESSION
diverso. Se il cookie di nome PHPSESSID
non esiste, verrà generato un identificativo casuale e memorizzato nel client col nome PHPSESSID
. Quando l'utente si collegherà la volta successiva alla stessa pagina, il PHP riconoscerà l'utente per il valore contenuto nel cookie, e imposterà in maniera appropriata l'array $_SESSION
.
session_start
funziona in maniera analoga al comando header
, manipolando le intestazioni del protocollo HTTP. Pertanto, bisogna ricordarsi che va usato prima che qualunque output sia stato emesso. Dopo, è troppo tardi.
Una sessione non è eterna. Ci sono vari modi per "sganciarci" dalla sessione in corso. Uno di questi è far sì che il browser non passi più il cookie PHPSESSID
al server web. Ecco alcune possibilità:
PHPSESSID
(come farlo dipende dal browser);PHPSESSID
viene automaticamente cancellato al riavvio;
In alternativa, è possibile distruggere la sessione, ovvero cancellare le informazioni che il PHP memorizza sul server web. Questo è possibile:
session_destroy()
;In ognuno di questi casi, quando viene chiamata la funzione session_start()
, il sistema non è in grado di recuperare un vecchia sessione e ne crea una nuova. Si provi, ad esempio, dopo aver richiamato un paio di volte lo script contatore mostrato sopra, a chiamare la seguente brevissima pagina PHP:
<?php session_start(); session_destroy(); ?>
Il contatore dovrebbe ripartire da 0. Notare anche che per distruggere una sessione occorre prima aprirla.
Tanto per curiosità, diciamo che il PHP memorizza le informazioni sulle sessioni in dei file dal nome sess_<idsess>
nella directory /var/lib/php/session
. Distruggere una sessione vuol dire essenzialmente cancellare uno di questi file. Notare che la directory dove vengono salvate le sessioni può variare da una distribuzione all'altra di Linux.
Lezione Precedente | Elenco Lezioni | Lezione Successiva |