lunedì 5 luglio 2010

JavaScript: cookie

L'HTTP, il protocollo usato per muovere le pagine web dai server ai client, è un protocollo senza stato (state-less). Ogni richiesta di pagina al server, avverrà come se il client contattasse il server per la prima volta! Questo significa che se in precedenza abbiamo già compilato i campi di un form ci tocca inserire di nuovo gli stessi valori se accediamo nuovamente a quella pagina!
Netscape, per dare memoria ai browser e ai server, inventò allora i cookie: piccoli file di testo memorizzati sul computer dell'utente e usati dai browser per ripristinare valori già scritti dall'utente (come ad esempio i campi dati relativi a nome utente e opzioni varie).
Il contenuto di un cookie prevede: una o più coppie nome-valore/i per i dati da memorizzare, una data che indica la scadenza del cookie, il dominio di appartenenza del cookie (il nome e il valore non possono contenere i caratteri: punto e virgola, virgola e spazio). Alla richiesta di una pagina web il cookie, se presente, viene allora aggiunto all'header HTTP sicché un programma lato server ne analizzerà il contenuto per poi applicare i vecchi valori alla pagina richiesta. La gestione dei cookie spetta dunque ai browser, che ne permettono sia la consultazione (quasi sempre incomprensibile per chi legge) che l'eliminazione.
Sono molte le tecnologie per il web che fanno ormai uso dei cookie e fra queste vi è anche JavaScript. Per JavaScript un cookie è una proprietà dell'oggetto document. Questo significa che per assegnare al documento un cookie è sufficiente scrivere una stringa di valori alla proprietà cookie. E' il programmatore a stabilire il significato e l'ordine dei valori nella stringa! Ad esempio:

document.cookie="name=valore1:valore2:...;proprietà1...;";

La proprietà expires imposta la data di scadenza per il cookie, che se non presente obbliga il browser a cancellare il cookie alla chiusura dello stesso. Il formato atteso è quello UTC, usare il metodo getUTCDate().
La proprietà path indica la pagina web a cui è associato il cookie. Di default un cookie viene applicato anche alle pagine gerarchicamente inferiori. Se si vuole invece far valere un cookie a tutte le cartelle e/o pagine del sito si deve allora indicare path="/".
La proprietà domain indica il nome del sito (quindi il dominio) a cui è associato il cookie. Se un sito è strutturato su più server web (ad esempio uno per ogni lingua), per far valere il cookie a tutti i server va impostato path="" e domain="dominio_sito".
L'ultima proprietà che vi presento è la proprietà secure che riceve un valore booleano (quindi true oppure false) per abilitare o meno la trasmissione dei cookie su un protocollo sicuro quale è HTTPS.
I cookie possono essere creati, letti e cancellati attraverso istruzioni JavaScript! Una delle prime proprietà da dare al cookie è il suo nome, in questo modo ci assicuriamo la creazione di un cookie univoco valido all'interno del nostro dominio. Si consiglia inoltre di usare la funzione escape() ogni volta che assegniamo un valore a un cookie (soprattutto se lo raccogliamo da un form). Questa funzione, infatti, ci permette di usare alcuni caratteri altrimenti inutilizzabili! Quando leggiamo il cookie non dimenticate di usare la funzione unescape(), per ripristinare la stringa!
Ecco una pagina di esempio (osservate il codice JavaScript all'interno della pagina, per facilitare il compito alla funzione split() ho separato i valori con un opportuno carattere!). E' preferibile non salvare nel cookie informazioni preziose, come ad esempio la password per l'accesso a un servizio. Perché?


Attraverso la gestione dei cookie del browser è possibile leggerne il contenuto, che non dovrebbe essere mai in chiaro!

Nessun commento:

Posta un commento