I cookies sono probabilmente lo strumento più popolare per gestire la persistenza delle sessioni con gli utenti. Chi non sapesse cosa sono i cookies, o perché sono così importanti, consigliamo di dare un'occhiata agli articoli sul protocollo HTTP e sulla sessione HTTP.

Esistono molti modi di settare i cookies, ed ogni browser li gestisce in modo diverso. Ad esempio, FireFox su Windows 7 solitamente memorizza i cookies nel file

C:\Users\Nome Utente\AppData\Local\Google\Chrome\User Data\Default\Cookies

che in questo caso è un mini-database realizzato con SQLite (chi volesse curiosare all'interno del database può usare il plugin SQLite Manager per Firefox). In ogni caso, qualsiasi sia il modo in cui il browser gestisce “fisicamente” i cookies, JavaScript ci offre un'interfaccia comoda e maneggevole, che permette di gestire i cookies senza preoccuparci di dove e come sono memorizzati.

L'oggetto JavaScript dedicato alla gestione dei cookie è

document.cookie

Un modo semplice di settare un cookie potrebbe essere

document.cookie='foo=42;expires=Tue, 01 May 2012 22:47:11 UTC;path=/' ;

nell'esempio qui sopra abbiamo settato un cookie di nome foo, con valore 42 e scadenza il 1° maggio 2012 (ignoriamo il path per il momento).

L'oggetto document.cookie è un oggetto molto speciale, che permette un uso diverso dalle altre variabili JavaScript. Se qualche riga sotto la definizione del cookie foo scriviamo anche

document.cookie='faa=ciao;expires=Tue, 01 May 2012 22:47:11 UTC;path=/' ;

il risultato sarà che avremo definito due cookies: foo e faa. In altre parole, ogni volta che assegniamo un valore all'oggetto document.cookie aggiungiamo un nuovo cookie al documento, e non cambiamo il valore dell'oggetto (come si potrebbe pensare).

Un cookie può essere anche settato usando la sintassi ridotta

document.cookie='foo=hello' ;

Se la scadenza e il path del cookie non vengono precisati, il cookie verrà cancellato al termine della sessione HTTP, mentre il path dovrebbe impostarsi automaticamente sul dominio e percorso corrente (quello della pagina dove viene creato il cookie). Il parametro path serve per dire al browser quando mandare il cookie, altrimenti manderemo tutti i cookies per qualsiasi richiesta HTTP sul nostro sito. Settando ad esempio path='/' sul dominio aziendeitalia.com manderemo il cookie tutte le volte che navighiamo su AziendeItalia (o un suo sottodominio). Scrivendo invece path='/promozioni' allegheremo il cookie all'header HTTP solamente quando navighiamo all'interno delle promozioni.

Per cancellare un cookie basta assegnare una scadenza nel passato, tipicamente un'unità di tempo prima dell'istante presente. Se stiamo creando cookies con scadenze dei giorni, ci tornerò comodo farli scadere settando come scadenza il giorno prima (ieri). Se li gestiamo con scadenze delle settimane, li cancelleremo facendoli scadere una settimana fa. Alla fine non cambia nulla, qualsiasi scadenza nel passato ha lo stesso effetto, ovvero rimuove il cookie.

La funzione Javascript

Vediamo adesso una funzione comoda per settare un cookie, precisando la scadenza come numero di minuti a partire dal current time:

function setCookie(name, value, last) {

if (last) {

var now = new Date() ;

var expires = new Date() ;

expires.setTime(now.getTime()+(parseInt(last)*60*1000)) ;

document.cookie=name+'='+escape(value)+'; expires='+

expires.toGMTString()+'; path=/';

} else {

document.cookie=name+'='+escape(value)+'; expires= ; path=/';

}

}

la funzioni qui sopra può essere inclusa in una pagina, all'interno delle tag <script> … </script>, per aiutarci a gestire i cookies in modo semplice e veloce. Consideriamo ad esempio

setCookie('foo','ciao',120);

setCookie('faa','hello',0);

la prima chiamata setterà il cookie foo con valore ciao, e lo farà scadere tra 2 ore (120 minuti). La seconda chiamata crearà il cookie faa con valore hello, che scadrà quando l'utente chiuderà il browser.

Esistono molte varianti di questa funzione, personalizzate in base all'esigenza. Il parametro più importante è spesso la scadenza. Nell'esempio qui sopra va espressa in minuti perché l'oggetto Date lavora con i millisecondi e noi moltiplichiamo la variabile last per 60.000. Se volessimo lavorare usando le settimane (quale unità di tempo) basterà scrivere

expires.setTime(now.getTime()+(parseInt(last) * 7*24*60*60*1000)) ;

poiché 7*24*60*60*1000 sono i millisecondi corrispondenti ad una settimana (7 giorni per 24 ore per 60 minuti per 60 secondi per 1000 millisecondi). In questo modo potremo usare la nostra funzione assegnando il valore value = 1 per creare un cookie che duri una settimana … e se durante i test vogliamo che tutti i nostri cookies durino solo pochi minuti, basterà cambiare il valore della funzione, senza mettere le mani sul codice che invoca la funzione setCookie().

Buoni biscotti a tutti!