Indice del libro

Una funzionalità molto interessante messa a disposizione da JavaScript è la possibilità di gestire i cookie.
In informatica, i cookie sono piccoli file di testo memorizzati sul computer dell'utente che contengono informazioni salvate dai siti web. La comodità dei cookie sta quindi nella possibilità di memorizzare in modo permanente delle informazioni univoche rispetto ad un utente; hanno tuttavia lo svantaggio di poter essere eliminati e disabilitati dall'utente.
Ciascun cookie è composto da alcuni parametri, tra i quali:

  • nome: un nome identificativo per il cookie
  • valore: il valore da memorizzare
  • scadenza (expiration date): è opzionale, stabilisce la data di scadenza del cookie, cioè la data dopo la quale questi vengono eliminati dal disco rigido dell'utente.
Per approfondire su Wikipedia, vedi la voce Cookie.
modifica
 
la funzione ImpostaCookie visualizzata dall'editor Bluefish

In JavaScript per impostare i cookie usiamo la proprietà cookie dell'oggetto document passandole come valore una stringa contenente i vari parametri separati da punto e virgola. Ecco ad esempio una semplice stringa di cookie:

NomeUtente=Ramac;expires=Tue, 28 August 2007 00:00:00

Questa stringa imposta un cookie NomeUtente al valore Ramac con scandenza 28 agosto 2007. Potremo salvare questo cookie con l'istruzione

document.cookie="NomeUtente=Ramac;expires=Tue, 28 August 2007 00:00:00"

La sintassi è quindi:

NomeCookie=Valore;parametri

Nel caso si volesse inserire nella stringa del valore un punto e virgola, è necessario usare la funzione escape() che converte tutti i caratteri particolari nel corrispondente esadecimale nel set di caratteri Latin-1. Questo vale anche per gli spazi, gli apostrofi, le virgole, ecc....

Per comodità, è possibile creare una funzione che crei i cookie partendo da tre parametri:

function impostaCookie (nome, valore, scadenza) {
    
    if (scadenza == "") {
        var oggi = new Date();
        oggi.setMonth(oggi.getMonth() + 3);
        //restituisce la data nel formato necessario
        scadenza = oggi.toGMTString();
    }
    valore = escape(valore);
    document.cookie=nome + "=" + valore + ";expires=" + scadenza;
}
modifica

Per ottenere i valori dei cookie relativi al proprio documento è necessario accedere alla proprietà document.cookie che restituisce una stringa contenente coppie di nome-valore di ciascun dato separate da un punto e virgola e uno spazio. Ad esempio:

cookie1=value1; cookie2=value2; cookie3=value3;

Possiamo notare due punti importanti:

  • mentre è possibile impostare valori come la data di scadenza del cookie, non è possibile ottenerli una volta modificati
  • i dati per una comoda lettura necessitano di una manipolazione stringa

Per la lettura dei cookie, può risultare utile questa funzione che restituisce il valore di un cookie a partire dal suo nome:

function valoreCookie (nome) {
   var valore=document.cookie; //ottiene la stringa di cookie
   var inizioCookie=valore.indexOf(" " + nome + "="); //trova il cookie desiderato
  
   //se non esiste, magari è all'inizio della stringa
   if (inizioCookie == -1) { 
      inizioCookie = valore.indexOf(nome + "=");
   }

   if (inizioCookie == -1) { //il cookie non esiste proprio
      valore = null;
   }
   
   if (inizioCookie >= 0) { //il cookie esiste
      //qui inizia la stringa del valore
      inizioCookie = valore.indexOf("=", inizioCookie) + 1; 
      var fineCookie = valore.indexOf(";", inizioCookie); //qui finisce
      if (fineCookie == -1)  //se non viene trovato, allora è l'ultimo cookie
         fineCookie = valore.length;
      //elimina i caratteri commutati
      valore = unescape(valore.substring(inizioCookie, fineCookie)); 
   }

   return valore;
}
modifica

Come è già stato accennato in precedenza, uno degli svantaggi dei cookie risiede nel fatto che possono essere facilmente disabilitati dall'utente; è pertanto necessario sviluppare soluzioni alternative ai cookie, soprattutto se sono parte essenziale della propria applicazione web.

Il modo più semplice per verificare se i cookie sono attivati è quello di crearne uno fittizio e verificare se è possibile ottenerne il valore. La seguente è una funzione che restituisce true se i cookie sono abilitati:

function cookieAttivi () {
    ris = false; //imposta il risultato a falso
    impostaCookie("testCookie", "test"); //crea il cookie fittizio
    if (valoreCookie("testCookie") == "test") { //se esiste
        ris = true; //allora i cookie sono abilitati
    }
    return ris;
}
modifica

Poiché ad ogni nome corrisponde un solo cookie, per modificare il contenuto di un cookie chiamato NomeUtente è sufficiente la riga

impostaCookie(NomeUtente, nuovo_contenuto, nuova_scadenza);

Per eliminare un cookie, invece, basta sostituire al testo del cookie una stringa vuota:

impostaCookie(NomeUtente, "");

modifica

Puoi utilizzare una libreria JavaScript per facilitare la gestione dei cookie, come js-cookie, o altre.