L'utilizzo di variabili di sessione permette di mantenere informazioni legate all'utente che sta visitando le nostre pagine. Vediamo quali funzioni possiamo utilizzare a riguardo
Il concetto di sessione definisce una tecnica
che permette di mantenere il valore di alcune variabili legate al particolare utente durante gli accessi a diverse
pagine. Questo "arteficio" nasce dal fatto che, come noto, il protocollo HTTP utilizzato per la richiesta di risorse ad
un web server è state-less cioè ogni richiesta è indipendente dalla altre così per potere seguire il percorso dell'utente
attraverso diverse pagine non rimane che "rimbalzare" tra esse delle variabili nascoste oppure utilizzare le funzioni predisposte
che in definitiva fanno proprio quello agevolando però il compito del programmatore.
PHO utilizza un espediente comune a molti linguaggi web cioè lega un cookie temporaneo all'utente, questo permette
di identificarlo univocamente e quindi mantenere "vive" le variabili che sono state associate. Oltre ciè quando il client
non permetta l'utilizzo di cookie viene applicato un sistema automatico di "URL rewriting" per cui ad ogni link viene associato
un parametro supplementare che, proprio "rimbalzando" tra le pagine accedute, svolge la stessa funzione del cookie.
Per potere usufruire dell'array associativo superglobale $_SESSION che ci servirà per registrare le nostre variabili
permanenti è necessario prima di generare qualsiasi tipo di output e in ogni pagina in cui si usa $_SESSION richiamare la funzione:
session_start()
la necessità di inserire questa funzione come prima istruzione nelle nostre pagine è data dal fatto che la definizione
dei cookie avviene a livello di "header HTTP" che vengono inviati al client proprio prima di ogni altro contenuto, per verificare
questa limitazione proviamo questo semplice codice:
print "prima io";
session_start();
si ottiene qualcosa del tipo
prima io
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\Apache2\htdocs\test.php:7) in C:\Apache2\htdocs\test.php on line 9
l'utilizzo corretto ci permette invece di utilizzare le variabili registrate anche in pagine successive:
uno.php:
session_start();
$_SESSION['msg']='sei passato da uno.php';
print "<a href='due.php'>vai a due.php</a>";
due.php
session_start();
isset($_SESSION['msg'])?print $_SESSION['msg']:print "NON sei passato da uno.php";
Si provi ad accedere a uno.php e a cliccare sullink per due.php, successivamente, avendo cura di annullare la sessione (si può fare chiudendo
il browser) si acceda direttamente a due.php.
Per annullare una variabile di sessione è sufficiente
unset($_SESSION[$variabile])
si provi ad esempio notando l'errore che viene generato
session_start();
$_SESSION['msg']='qua';
print $_SESSION['msg']."<br>\n";
unset ($_SESSION['msg']);
print $_SESSION['msg']."<br>\n";
date le peculiarità della funzione session_start() essa viene spesso inserita come prima comando all'interno di un file
(ad es: config.php) che verrà incluso all'inizio di ogni pagina dell'applicazione.
A volte, ad esempio quando si voglia mantenere una traccia permanente (quindi non legata solo alla sessione) dell'utente
in un file oppure in un database, può essere utile associare l'utente alla stringa univoca (session id) generata da PHP,
per recuperare questa stringa si usa
session_id()
Se nei successivi accessi si vuole che l'utente "riacquisti" la sessione originale è possibile farlo, prima di invocare
session_start() passando il session id alla funzione:
session_id($old_session_id)
Riferimenti, esempi e teoria sulle funzioni che PHP fornisce