JavaScript Cookies

Oggi vedremo in linea teorica il funzionamento dei JavaScript Cookies.
Questa loro caratteristica di essere dati temporanei permette loro di essere cancellati al termine di una sessione di navigazione.
Ogni cookie al suo interno possiede quattro dati standard che ne denotano il comportamento e l’utilizzo:

  1. La data di scadenza;
  2. La pagina web a cui sono associati;
  3. Il dominio di appartenenza;
  4. Il metodo di trasmissione, ossia se viaggiano su protocollo HTTP protetto(HTTPS) oppure no.
Proprietà e metodi dei JavaScript Cookies

Gestione dei JavaScript Cookies

In JavaScript, i cookie sono proprietà che fanno riferimento al document.
Come è possibile vedere da questo altro tutorial pratico con un cookie è possibile gestire tre azioni:

  • Creazione, con eventuale assegnazione;
  • Modifica del cookie.
    document.cookie = nomeCookie + '=' + escape(valoreCookie) + '; expires='
           + scadenza.toGMTString() + '; path=/';
  • Cencellazione del cookie.

A tal proposito ho realizzato un manager JavaScript che contestualizza esattamente queste tre operazioni.

var _cookieManager = function() {
	this.setCookie = function (cname, cvalue, exdays, path) {
	    var d = new Date();
	    d.setTime(d.getTime() + (exdays*24*60*60*1000));
	    var expires = "expires="+d.toUTCString();
	    var cpath = "path=" + path; //path=/ 
	    document.cookie = cname + "=" + cvalue + "; " + expires + "; " + cpath;
	}
 
	this.getCookie = function(cname) {
	    var name = cname + "=";
	    var ca = document.cookie.split(';');
	    for(var i=0; i<ca.length; i++) {
	        var c = ca[i];
	        while (c.charAt(0)==' ') c = c.substring(1);
	        if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
	    }
	    return "";
	}
 
	this.deleteCookie = function(cname) {
		//document.cookie = cname + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
		this.setCookie(cname, "", -1, "/");
	}
 
	this.hasCookie = function(cname) {
		return this.getCookie(cname) !== "";
		//return false;
	}
}

Ad esempio supponiamo di trovarci in una pagina X di una web-app e volerci spostare in una pagina Y della nostra web-application e non vogliamo passare tali dati mediante la URL potremmo settare un cookie prima di effettuare il redirect alla Y e leggerli non appena il DOM ha caricato la pagina Y, senza esserci persi e facendo in modo che ciò avvenga in maniera silente per l’utente.
Come abbiamo avuto modo di capire il document.cookie equivale ad una stringa. Per completezza il valore assegnato ad un cookie non può contenere i caratteri (,), punto e virgola (;) e gli spazi bianchi, qualora occorra inserire questi caratteri speciali entra in nostro soccorso la funzione escape(), per codificare il valore del dato prima di memorizzarlo nel cookie. Per poter poi decodificare tali valori, JavaScript mette a disposizione la funzione unescape().

Alcune delle limitazioni tipiche derivanti dalla gestione dei cookies imposte dai browser sono:

  • Non si possono memorizzare più di 300 cookie per browser web;
  • Vengono mantenuti al massimo 20 cookie per ogni server;
  • Per ciascun cookie viene riservato un file di al massimo 4KB.

PROPRIETÀ DEI COOKIES

Dalle funzioni di cui sopra sono state implicitamente citate alcune delle proprietà dei cookies, tra queste abbiamo.

expires

expires=data

Indica la durata del cookie, mediante impostazione della data. Non a caso mantenendoci al manager di cui sopra chiamando il metodo CookieManager.setCookie(“var_cookie”, value, 365, “/”); settiamo nel cookie var_cookie il valore value con una durata di 365 giorni. Chiamando il medesimo metodo con il valore -1 il cookie viene distrutto, basta vedere il metodo deleteCookie del manager JavaScript. A rigor di logica, la distruzione del cookie significa che il suo contenuto non è più accessibile da un browser web, ma il file precedentemente creato resta memorizzato su disco per cancellare effettivamente dal disco i cookies occorre svuotare i cookie dal browser e non distruggerli mediante JavaScript!

path

path=percorso

Il path indica il percorso da cui è visibile il cookie nella web-application, nel nostro esempio con “/” diciamo che esso è accessibile da qualsiasi path dell’applicazione ma potevamo benissimo restringere il raggio di azione limitandolo ad una specifica pagina web, esempio “/page_a”.ù

domain

domain=nome_dominio

Il path indica il dominio al quale è associato il cookie. Voi direte ma la mia applicazione viaggia sul dominio nomedominio.com che me ne faccio di questa proprietà? Domanda lecita 🙂 Ma che succede se voglio passare un cookie tra due domini perchè potrebbe capire in architetture più complesse di avere l’applicazione distribuita su più web-server. Eh allora sono guai, perchè il contesto del cookie sul dominio it.nomedominio.com non è visibile sul dominio fr.nomedominio.com, per fare ciò nel setCookie dovremmo avere anche il parametro domain che per essere visibile a tutti i web server della web-app deve avere valore dell’attributo path pari a ” “.

secure

secure=true_false

Questa proprietà permette di stabilire quando i cookie debbano essere trasmessi in rete. Di solito i dati contenuti nei cookie viaggiano in chiaro, far viaggiare questi dati in chiaro potrebbe talvolta comportare dei problemi per la sicurezza, a tal proposito è state creata questa variabile appunto per l’encrypt dei cookie, però attenzione perchè essa agisce solo ed esclusivamente se il protocollo su cui viaggia la web application è l’HTTPS.

METODI DEI COOKIES

La Oltre i metodi di escape ed unescape sopra citati che più che essere strettamente legati ai cookie riguardano le stringhe di assegnazione a loro connessi, introduciamo i tre metodi impiegati sui cookie.

  • store(), Esegue la concatenazione di tutti i valori delle proprietà dei cookie, per creare la stringa che ne costituirà il valore.
  • load(), legge il valore della proprietà cookie dall’oggetto del document. Infatti se si vuole recuperare il valore di un cookie dall’oggetto document.cookie occorre effettuare una manipolazione di stringhe utilizzando il metodo split che ne permette di individuarne i valori tra i delimitatori, altrimenti è possibile semplificare utilizzando il metodo load.
  • remove(), rimozione del cookie dall’oggetto document.
JavaScript Cookies ultima modidfica: 2018-10-01T16:13:47+02:00 da Gianluca Di Vincenzo
Posted in: Java, PHP

By on 1 Ottobre 2018

Tagged: , , , , ,