Corso PHP/ Lezione 12: Le sessioni

Cosa sono le sessioni? Come si usano in PHP? A questi ed altri interrogativi risponderemo in questa ultima lezione del nostro corso
Cosa sono le sessioni? Come si usano in PHP? A questi ed altri interrogativi risponderemo in questa ultima lezione del nostro corso


Nella lezione dedicata all’uso dei cookies abbiamo visto che essi,
consentendoci di rendere persistenti delle variabili nell’arco di più accessi
HTTP, possono essere sfruttati per il mantenimento di un rudimentale stato. Il
meccanismo dei cookies, tuttavia, presenta delle limitazioni intrinseche che lo
rendono inadatto ad applicazioni complesse. Un esempio per tutti: vogliamo
essere in grado di mantenere uno stato anche nell’eventualità in cui il browser
del visitatore non supporti i cookies (o li abbia disabilitati).

Arriviamo così a parlare di sessioni. Precisiamo subito che il supporto
nativo per le sessioni è stato introdotto nella versione 4 di PHP; se si ha
necessità di gestire le sessioni con la versione precedente sarà necessario
ricorrere ad apposite librerie, come ad esempio le ottime PHPLIB. Cominciamo con
l’esaminare alcune nozioni di base sulle sessioni.

Una sessione, in questo contesto, consiste di una serie di accessi alle
nostre pagine PHP, effettuati in un determinato arco di tempo durante il quale
viene mantenuto uno stato. Ogni sessione è individuata da un identificatore,
univoco, utilizzato per l’associazione tra client e relativa sessione.

Per utilizzare le sessioni in PHP 4 abbiamo bisogno essenzialmente di tre
funzioni, e precisamente: session_start() , session_register() e session_destroy() .

La prima funzione, session_start() , viene invocata per creare una
nuova sessione o per ripristinarla, nel caso sia stata creata in precedenza.
Questa funzione tenta anche di impostare, nel browser, un cookie contenente
l’identificativo di sessione, per cui è necessario che venga invocata
all’inizio degli script, esattamente come nel caso della funzione setcookie() .

La funzione session_register() , invece, viene utilizzata per
registrare delle variabili come variabili di sessione. Ad esempio, se abbiamo
una variabile $nomeutente e vogliamo renderla persistente per tutta la
durata della sessione, invocheremo session_register() nel modo seguente

// $nomeutente diventa variabile di sessione

session_register("nomeutente");

Infine, la funzione session_destroy() viene invocata per distruggere i
dati relativi alla sessione, tipicamente al momento del "log out".

Come si vede, quindi, lavorare con le sessioni è piuttosto semplice. L’unico
aspetto critico, al quale il programmatore deve prestare la massima attenzione,
è quello della propagazione del SID, il già citato identificatore di sessione.
Sebbene, infatti, nella maggior parte delle situazioni reali, sarà sufficiente
memorizzare tale valore in un cookie nel browser del visitatore (PHP lo fa
automaticamente), è opportuno gestire anche il caso in cui i cookies non
possano essere utilizzati (perché il browser non li supporta o è stato
configurato per rifiutarli).

In questo "caso pessimo" è il programmatore PHP che deve
preoccuparsi della propagazione del SID, modificando i link tra i vari script
che condividono la sessione e passandolo come parametro. A dispetto di quanto
possa sembrare, si tratta di un’operazione piuttosto semplice: basta includere
nei link alle altre pagine PHP il valore della costante SID, come nell’esempio
seguente:

<!--

Un esempio di link che propaga l'identificativo

di sessione senza richiedere cookies

-->

<a href="altroscript.php?<?= SID ?>">Altro script</a>



Mettiamo in pratica quanto abbiamo imparato sulle sessioni realizzando un
semplice esempio: la “sequenza di colori”. Si tratta di uno script PHP
che propone al visitatore di cliccare su uno dei tre colori disponibili (bianco,
rosso e verde), mostrando al contempo la sequenza delle selezioni effettuate
fino a quel momento. Il funzionamento dello script è molto semplice: la
sequenza dei click sui vari colori viene memorizzata in un array, registrato
come variabile di sessione.

Vediamo in dettaglio il codice. La prima cosa da fare è l’avvio della
sessione: a tal proposito è importante ricordare che affinché PHP possa
impostare il cookie con l’identificativo di sessione, questa chiamata di
funzione deve avvenire prima che qualsiasi output sia inviato al browser del
visitatore.

// Attivo (o ripristino) la sessione

session_start();

Il secondo passo è la registrazione dell’array $clicks come variabile di
sessione.

// 'clicks' e' una variabile di sessione: devo
registrarla

session_register("clicks");

Passiamo adesso all’analisi dei parametri passati dall’utente. Per prima cosa
verifichiamo se è stato cliccato il link “Ricomincia da capo”, che
comporta l’azzeramento della sequenza (cioè dell’array).

// Devo azzerare?
if ($azzera) {

$clicks = array();

}

Se l’utente ha cliccato su uno dei colori lo aggiungiamo alla sequenza,
inserendo un nuovo elemento in coda all’array.

if ($click) {

$clicks[] = $click;

}

Infine, arriviamo alla visualizzazione della sequenza dei colori. Se l’array che
rappresenta la sequenza contiene almeno un elemento (quindi, se è stato scelto
almeno un colore) vengono visualizzati tutti i suoi elementi; diversamente viene
mostrata la scritta “(sequenza vuota)”.

if (count($clicks)) {

foreach ($clicks as $colore) { echo "$colore "; }

} else {

echo "(sequenza vuota)";
}



Con l’esempio appena presentato si conclude questa lezione che è anche l’ultima
del Corso di PHP. Voglio qui salutare e ringraziare tutti i lettori che lo hanno
seguito, ricordando che per inviare commenti, critiche o suggerimenti sul corso
è a vostra disposizione il forum su PHP di LatoServer.it .

Luca Balzerani , studente di
Informatica, è fondatore e presidente di LatoServer.it ,
sito dedicato alla programmazione server-side ed al backend in generale.

Link copiato negli appunti

Ti potrebbe interessare

27 01 2001
Link copiato negli appunti