Premessa

Il Cookie è un meccanismo utilizzato per memorizzare dei dati sul browser dell’utente. Si tratta in pratica di un file dove possono essere memorizzate informazioni di varia natura, per esempio i dati di autenticazione per un sito internet, la lingua preferita per la navigazione, le personalizzazioni del template, eccetera.
PHP ha due funzioni abbastanza simili per la creazione dei cookie: setcookie() e setrawcookie(). Ricordiamoci che i cookie sono parte dell’header HTTP della pagina, quindi le funzioni setcookie() e setrawcookie() vanno usate prima dell’invio di qualsiasi output al browser.

È comunque possibile creare un buffer dell’output usando le opportune funzioni, così da poter ritardare la creazione del cookie fino al momento in cui ci servirà.

Tutti i cookie inviati al client vengono anche memorizzati un array globale chiamato $_COOKIE (se nel file php.ini la variabile variables_order contiene il valore C).

Come creo un cookie?

Per creare un cookie utilizziamo, come già detto, la funzione setcookie(), la cui sintassi è:

bool setcookie ( string $nome 
               [, string $valore 
               [, int $scadenza = 0 
               [, string $percorso 
               [, string $dominio 
               [, bool $sicurezza = false 
               [, bool $accessohttp = false 
               ]]]]]] );

Analizziamo la funzione e i parametri:
innanzitutto possiamo notare che la funzione setcookie() è di tipo bool, quindi l’esecuzione della funzione restituisce TRUE se la creazione termina con esito positivo, FALSE nel caso contrario.

Parametro Descrizione
$nome Il nome del cookie.
$valore Il valore memorizzato nel cookie. Questo valore verrà memorizzato sul computer client per cui è bene non memorizzare informazioni sensibili (come ad esempio password o numeri di carta di credito).
$scadenza Ovvero quando il cookie verrà cancellato dal client. Questo valore è un timestamp Unix e di solito si genera usando la funzione time(), ossia il timestamp attuale, più il numero di secondi di validità del cookie.
Per esempio: time()+60*60*24*30 imposta la scadenza a 30 giorni dal momento della creazione.
Se impostato a 0 o se viene omesso, il cookie verrà eliminato alla chiusura del browser o manualmente (cookie senza scadenza).
$percorso È il percorso per cui il cookie ha validità. Il valore predefinito è /, che si riferisce all’intero dominio. Un valore del tipo /foo/bar rende il cookie valido solo nel percorso dominio/foo/bar.
$dominio Il dominio per cui vale il cookie. Per esempio, un valore del tipo .example.com rende il cookie valido in ogni parte del dominio; mentre un valore del tipo www.example.com lo rende valido solo nel sottodominio www.
$sicurezza Indica il tipo di trasmissione del cookie: se impostato a TRUE il cookie verrà impostato solo tramite protocollo HTTPS e solo se questo esiste.
$accessohttp Questo parametro è un’interessante novità introdotta nella versione 5.2.0 di PHP. Quando impostato a TRUE, il cookie sarà accessibile solo attraverso il protocollo HTTP evitando così l’accesso a linguaggi di scripting come ad esempio JavaScript. Questa impostazione riduce realmente il furto delle credenziali attraverso attacchi XSS (anche se non è supportato da tutti i browser).

Un codice di esempio

$nome_cookie = "cookie_di_esempio";
$valore_cookie = "sono un cookie inutile!";
$scadenza_cookie = time()+604800;
$dominio_cookie = "guide.dev2web.org";
setcookie($nome_cookie, 
          $valore_cookie, 
          $scadenza_cookie, 
          "./", 
          $dominio_cookie, 
          FALSE, 
          TRUE);

Come leggere il valore di un cookie

Una volta creato il cookie, questo può essere letto come un normale array.

Possiamo anche verificare se il cookie esiste usando la funzione isset().
Vediamo subito l’esempio basato sul codice che ho scritto prima per la creazione:

if(isset($_COOKIE["cookie_di_esempio "])) {
    echo "Il cookie vale: " . $_COOKIE["cookie_di_esempio "];
} else {
    echo "Il cookie non esiste :(";
}