Come
ogni buon linguaggio legato alla generazione
dinamica di pagine web, anche il PHP consente di
gestire i cookies, piccoli file di testo
contenenti informazioni utili e non dannose per la
gestione delle sessioni sul web. Essendo il PHP
un linguaggio nato per l'interazione con il WWW,
le funzioni relative ai Cookies sono interne al
PHP stesso, differentemente da come avviene per
altri linguaggi, Perl su tutti (a questo
proposito, si veda il tutorial sui Cookies in Perl
pubblicato su CGIpoint, nonchè la recensione di
cookie-lib presente nello stesso sito).
La
funzione che ci interessa è solo una: setcookie().
La sua sintassi di base è:
Vediamo
di chiarire le opzioni che si possono passare alla
funzione:
Nome è il nome del cookie, che può essere
arbitrariamente scelto;
Valore è il valore, anch'esso arbitrario, da
assegnare al cookie;
Espirazione è la data di espirazione del
cookie;
Percorso è la directory, a partire dal dominio
(vedi sotto) per la quale il cookie è valido;
Dominio è il dominio per il quale il dominio è
valido;
Secure è un valore che imposta se il cookie
debba essere inviato tramite una connessione
HTTPS.
Poniamo di voler inviare dalla
nostra pagina un cookie chiamato "Test", con
valore "Prova per il cookie Test", con espirazione
di un minuto dal momento dell'invio, per la
directory "/nomeutente" del dominio
"http://www.dominio.com" senza utilizzare una
connessione HTTPS: i parametri da passare a
setcookie sono:
setcookie("Test",
"Prova per il cookie Test", time()+60,
"/nomeutente", ".dominio.com",
0);
Le cose
interessanti da esaminare sono due: il tempo di
espirazione e la connessione HTTPS. Per la
seconda, impostiamo con "0" che la connessione
deve essere una normale connessione HTTP; se
volessimo utilizzare il protocollo sicuro HTTPS,
dovremo inserire il valore "1". Il tempo di
espirazione non può essere impostato come "Tre tre
minuti", poichè la cosa non ha tempo: dobbiamo
invece impostare il momento di espirazione a
partire dal momento in cui il cookie è inviato
all'utente; per questo, utilizziamo la funzione
interna time() alla quale aggiungiamo il numero di
secondi dopo i quali il cookie deve scadere. Ad
esempio, se il cookie viene inviato alle 13:20:00
e vogliamo che esso espiri dopo 30 minuti
(60x30=1800 secondi) possiamo scrivere come
espressione di expire:
time()+1800
In
questo modo, time() riporta le 13:20:00 e
time()+1800 sarà 13:50:00
Fra i sei valori
da passare come argomento al cookie, solamente il
primo è obbligatorio: gli altri possono essere
lasciati bianchi se non sono di particolare
interesse. Inoltre, per l'invio di un cookie, è
necessario cheto venga inviato al browser prima di
qualsiasi output: è quindi necessario inserire la
funzione prima di ogni tag <HTML> o
<HEAD>.
Per finire, vediamo come
leggere un determinato cookie da uno script:
ricordando che un cookie viene inviato come un
array di dati, possiamo ricorrere alle funzioni
relative agli array: quindi potremo scrivere ad
esempio:
if
(isset ($HTTP_COOKIE_VARS) ) { while (list
($nome, $valore) = each ( $HTTP_COOKIE_VARS ) )
{ echo "$nome = $valore\n"; } }
Quindi,
per tutte le informazioni inserite nel cookie,
verrà visualizzata una coppia "nome = valore":
ovviamente, il valore è il valore che voi avete
impostato nel cookie, i "nome" sono: cookie,
expires, path, domain e secure (quest'ultimo è
particolare, visto che se impostato su 1 fa
apparire "secure" nel cookie, altrimenti non fa
apparire alcunchè). Per il nostro cookie di
esempio, leggeremo qualcosa del
genere:
Se
avessimo impostato 1 anzichè 0 per il protocollo
HTTPS, sarebbe apparso anche "secure" alla fine
della stringa. notate un'ultima cosa: la data è
gestita di default secondo l'orario GMT: se
notate, infatti, l'espirazione è impostata per le
11:50:00 GMT, che sono le 13:50:00 locali.