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 :("; }
non riesco a settare nessun cookies con php, che è variato qualcosa? negli ultimi tempi o variato qualche settaggio?
Scusa il ritardo nella risposta…
Nulla dovrebbe essere variato al punto di non poter settare cookie…
Verifica le impostazioni del browser e controlla il tuo error.log per capire cosa non va.