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


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.

La tua email sarà utilizzata per comunicarti se qualcuno risponde al tuo commento e non sarà pubblicato. Dichiari di avere preso visione e di accettare quanto previsto dalla informativa privacy

  • Anonimo scrive:
    Non funziona
    Ho provato a fare l'aggiornamento da MacOS 8.6 ma non funziona... ci vuole per forza il 9 o il 9.0.4
    • Anonimo scrive:
      Re: Non funziona
      - Scritto da: Max
      Ho provato a fare l'aggiornamento da MacOS
      8.6 ma non funziona... ci vuole per forza il
      9 o il 9.0.4Dopo alcune prove ho verificato che l'installer fa un controllo "formale" sulla versione del sistema installato. Il controllo si può aggirare modificando una risorsa del sistema, e l'installer esegue l'aggiornamento senza alcun problema; i rischi di questa operazione (qualsiasi tipo di rischio) sono tutti di chi esegue questa modifica.Tecnicamente è quindi possibile aggiornare anche sistemi precedenti al MacOS9, e questo lo si poteva intuire proprio dal file ReadMe allegato con l'aggiornamento.Il problema a questo punto sembrarebbe essere solo di licenze: Apple dice da una parte (pagina di download) che è necessario avere MacOS9, ma dall'altra (file ReadMe) spiega come aggiornare da versioni precedenti.Probabilmente l'upgrade era stato preparato per tutte le versioni di MacOS ma poi alla fine si è deciso di inserire una verifica sul sistema installato, non è ben chiaro se per motivi di licenza o per garanzie tecniche sul funzionamento di alcuni componenti.
      • Anonimo scrive:
        Re: Non funziona
        - Scritto da: Julius

        Ho provato a fare l'aggiornamento da MacOS

        8.6 ma non funziona... ci vuole per forza
        il

        9 o il 9.0.4

        Dopo alcune prove ho verificato che
        l'installer fa un controllo "formale" sulla
        versione del sistema installato. Il
        controllo si può aggirare modificando una
        risorsa del sistema, e l'installer esegue
        l'aggiornamento senza alcun problema; i
        rischi di questa operazione (qualsiasi tipo
        di rischio) sono tutti di chi esegue questa
        modifica.
        Beh, ma come si fa operativamente?
        • Anonimo scrive:
          Re: Non funziona
          Sul file ReadMe allegato all'aggiornamento a 9.1 c'e' scritto a chiare lettere che per aggiornare sistemi precedenti al "9" bisogna far partire il computer con un CD di boot (es.: hai System 8.6? Parti dal CD dell'8.5 ed installa l'aggiornamento a 9.1.That's it!Carlo S.PS: Alla faccia di quelli che si fanno pagare "sistemi operativi totalmente nuovi" con biglietti da centomila, ma poi si scopre che sono bugfix con modifiche all'interfaccia (e non al malfunzionamento!!!).
          • Anonimo scrive:
            Re: Non funziona
            - Scritto da: Carlo S.
            Sul file ReadMe allegato all'aggiornamento a
            9.1 c'e' scritto a chiare lettere che per
            aggiornare sistemi precedenti al "9" bisogna
            far partire il computer con un CD di boot
            (es.: hai System 8.6? Parti dal CD dell'8.5
            ed installa l'aggiornamento a 9.1.
            That's it!In realtà così non funziona... bisogna proprio cambiare la risorsa del System.Ciao
  • Anonimo scrive:
    Le applicazioni carbonizzate non sono native
    Nell'articolo e' stato scritto che le applicazioni "carbonizzate" erano native per MacOSX. Cio' non e' esatto; infatti sono le applicazioni COCOA quelle realmente native. CARBON e' cosa molto differente e serve solo come transizione verso il COCOA e non richiede la riscrittura totale del codice.
Chiudi i commenti