Le variabili utilizzate negli script php hanno validità ristretta ad una singola esecuzione della pagina. Una volta terminato lo script esse vengono deallocate. A questa regola fanno eccezione i cookie e le SESSIONI. Ad una variabile cosidetta di sessione si accede mediante l’array associativo $_SESSION, queste sono valide non solo nello script che le esegue ma anche in altri script del nostro progetto, facenti parte della medesima sessione.
Per essere più formali in PHP, con sessioni ci si rifesrisce appunto all’array associativo $_SESSION che contiene più variabili attive nella stessa sessione.
Il PHP mette a disposizione due comandi base per la gestione delle sessioni:
1) bool session_start(void): recupera la sessione corrente se esiste o ne crea una nuova, restituisce sempre true;
2) bool session_destroy(void): distrugge tutti i file relativi alla sessione corrente, restituisce true in caso di successo, false altrimenti.
Di seguito si riporta un semplice esempio, che non fa altro che incrementare una variabile di sessione semplicemente ricaricando lo script.
<?php session_start(); ?> <html> <head> <title>Incrementa sessione</title> </head> <body> <?php if(isset($_SESSION['count'])) echo("Hai visitato la pagina".$_SESSION['count']++."volte"); else{ echo("Sei un nuovo utente!"); $_SESSION['count']=1; } ?> </body> </html> |
Ma come si fa a riconoscere che si tratta di utenti diversi?
Semplice tutto si basa sui cookie del browser. Mediante la funzione session_start() il PHP controlla se esiste nel client un cookie con nome PHPSESSID e gli associa un numero esadecimale generato casualmente e memorizzato nel client.
Però attenzione il comando session_start funziona come il comando header, non a caso esso manipola il protocollo HTTP, perciò deve essere invocato prima di ogni emissione di output sulle variabili di sessione.
Una sessione non è eterna, ci sono vari modi per far in modo che essa termini:
1) cancellando il cookie PHPSESSID
2) accedendo alle stesse pagina da un altro browser
3) chiudendo e riaccedendo al browser
In alternativa e possibile effettuare questa cancellazione anche esplicitamente utilizzando il comando session_destroy(), la quale istruzione deve però seguire la session_start(); altrimenti il sistema non è in grado di recuperare la vecchia sessione.