L’HTTP è un protocollo stateless: tra una chiamata, cioè la visita di una pagina web dal browser e la successiva non c’è alcun legame: semplicemente il nostro browser richiede la prima e successivamente la seconda. Dal lato server, dove gira PHP il filo conduttore con la nostra visita, viene segnata dal sistema delle sessioni.
Una sessione inizia quando visitiamo un sito e finisce appena chiudiamo la finestra del browser. A questa nostra visita – o sessione, appunto – viene assegnato un identificativo univoco, che possiamo sfruttare per eseguire alcune operazioni. Il risultato più importante, è che possiamo tracciare un filo tra le pagine viste dall’utente che visita il nostro sito e alcuni dati che vogliamo collegare a questa visita. Ricordiamoci che questi dati vengono conservati lato server.
Nel nostro codice, questi dati sono impostabili attraverso l’array superglobale $_SESSION
e manipolabili attraverso alcune funzioni predefinite di PHP che vedremo in seguito.
<?php /* Per abilitare le sessioni, la prima riga del codice deve chiamare la funzione session_start(); */ session_start(); ?>
Per utilizzare le sessioni, ricordiamoci di chiamare, prima di ogni altra istruzione, la funzione session_start()
. Questo crea la sessione vera e propria e genera l’identificativo della stessa, che ci servirà poi in seguito. A questo punto abbiamo a disposizione, da qualsiasi pagina e sempre all’interno della nostra visita, l’array $_SESSION
che possiamo manipolare a piacimento.
Immaginiamo una visita tra due pagine, pagina1.php e pagina2.php.
pagina1.php
<?php // Sessione avviata session_start(); $_SESSION['nome_visitatore'] = "Luca"; $_SESSION['cognome_visitatore'] = "Rossi"; ?>
In questa pagina impostiamo le variabili di sessione.
pagina2.php
<?php session_start(); echo "Questa visita è fatta da " . $_SESSION['nome_visitatore'] . " " . $_SESSION['cognome_visitatore']; ?>
In pagina2.php la variabile $_SESSION
conterrà magicamente i dati impostati nella pagina precedente, cioè pagina1.php.
pagina3.php
In questa pagina, possiamo immaginare di visualizzare l’ID univoco della sessione attraverso la funzione session_id()
e poi di distruggerla con la funzione session_destroy()
. Se tornassimo a pagina2.php, quindi, non vedremmo più nome e cognome! Come detto, cioè avviene naturalmente anche quando chiudiamo la finestra del browser.
<?php session_start(); echo "ID della sessione " . session_id(); //Distruggo la sessione session_destroy(); ?>
Cookie
Se le sessioni ci permettono di conservare dei dati temporaneamente, fino alla chiusura del browser, PHP offre un altro modo per conservare per un tempo più lungo, deciso da noi, dei dati nel browser dell’utente, cioè la possibilità di conservare dei Cookie. Anche se l’utente chiude il browser o riavvia il dispositivo, questi dati sono sempre presenti lato client. Vengono cancellati automaticamente solo in due casi: alla loro scadenza, che decidiamo noi esplicitamente, oppure se l’utente li cancella manualmente dalle impostazioni del suo browser. Per farlo, PHP ci mette a disposizione l’array $_COOKIE
, che viene usato in modo del tutto analogo a quello $_SESSION
. Per creare un cookie, dobbiamo usare la funzione setcookie()
, come in esempio:
paginaA.php
<?php setcookie("NomeVisitatore", "luca"); setcookie("CognomeVisitatore", "rossi" , time()+3600); ?>
Nel nostro esempio, creiamo due Cookie. Il primo che ha come nome NomeVisitatore
contiene la stringa “luca”, mentre il secondo CognomeVisitatore
contiene la stringa “rossi”. In questo secondo caso, abbiamo passato alla funzione un terzo parametro opzionale, che contiene la somma di time()
che corrisponde all’ora attuale e 3600
, cioè un’ora espressa in secondi. Stiamo dicendo che questo Cookie scadrà alla data attuale + 1 ora. Il primo, non avendo questo parametro, non avrà scadenza!
paginaB.php
<?php echo "Questa visita è fatta da " . $_COOKIE['NomeVisitatore']; ?>
Analogamente a quanto visto per le sessioni, usiamo i Cookie impostati in paginaA.php tramite l’array $_COOKIE
. A differenza delle sessioni, però, i cookie vengono conservati sul computer o smartphone dell’utente fino alla loro scadenza.
paginaC.php
<?php //Distruggiamo il cookie unset($_COOKIE["NomeVisitatore"]); //Su alcuni browser potrebbe non funzionare setcookie("NomeVisitatore", null, -1); ?>
Per cancellare un Cookie, esistono due metodi, che vi consiglio di usare in contemporanea, perché alcuni browser potrebbero non interpretare correttamente il primo comando, unset()
. Il secondo, imposta il cookie con scadenza nel passato (-1), annullando la sua validità.