devdev / in the loop
PHP PHP

Guida PHP 7 startup
Sessioni e cookie

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à.

Capitolo successivo → Include e require
Precedente ← $_GET e $_POST
if (weekend) {
    relax();
}
la nostra newsletter, ogni tanto.