Contenuti

w/arc Introduzione ai Cookies

Contenuti

I cookie sono stati in passato oggetto di polemiche e diffidenza da parte dei navigatori Internet. In termini tecnici i cookie sono dei file di testo che alcuni siti depositano sul computer client, e che vengono interpretati dal server per raccogliere informazioni di vario genere sulle abitudini e i gusti dell’utente. Proprio su questo punto si sono focalizzate le maggiori perplessità di chi ritiene che tale tecnologia possa divenire uno strumento per violare, a scopi commerciali, la privacy di privati cittadini.

In altre parole i cookie sono una sorta di promemoria che il server deposita sui nostri hard disk per tenere memoria di informazioni che altrimenti andrebbero perse al momento dell’uscita dal sito.

Per chi fosse curioso e volesse conoscere tutti i cookie installati sul proprio hard disk, può trovarli, sempre che usi Win95, all’interno della cartella: WINDOWS/COOKIE. Questa piccola ricerca può essere utile per comprendere quali siti si servono di tale tecnologia.

E’ bene ricordare che sia Netscape che MSIE permettono di disabilitare i cookie, ovvero di confermarne o rifiutarne l’installazione.

L’esempio in javascript che presentiamo in questo numero si serve proprio dei cookie per determinare il numero di passaggi che un utente compie su una pagina Web. Senza l’uso di cookie tale esempio non sarebbe possibile, visto che il contatore verrebbe azzerato ad ogni nuovo collegamento.

La sintassi javascript è la seguente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 <script>
 <!--
  function getCookieVal (offset)  {
   var endstr = document.cookie.indexOf (";", offset);
   if (endstr == -1)
     endstr = document.cookie.length;
   return unescape(document.cookie.substring(offset, endstr));
  }

 function GetCookie (name)  {
   var arg = name + "=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;

   while (i < clen)  {
     var j = i + alen;
     if (document.cookie.substring(i, j) == arg)
       return getCookieVal (j);
     i = document.cookie.indexOf(" ", i) + 1;
     if (i == 0)
             break;
   }
   return null;
  }

 function SetCookie (name, value)  {
   var argv = SetCookie.arguments;
   var argc = SetCookie.arguments.length;
   var expires = (2 < argc) ? argv\[2\] : null;
   var path = (3 < argc) ? argv\[3\] : null;
   var domain = (4 < argc) ? argv\[4\] : null;
   var secure = (5 < argc) ? argv\[5\] : false;

   document.cookie = name + "=" + escape (value) + ((expires == null) ? "" :
     ("; expires=" + expires.toGMTString())) + ((path == null) ? "" :
     ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) +
     ((secure == true) ? "; secure" : "");
  }

 function DisplayInfo()  {
   var expdate = new Date();
   var visit;

   expdate.setTime(expdate.getTime() + (24 \* 60 \* 60 \* 1000 \* 365));
   if(!(visit = GetCookie("visit")))
     visit = 0;
   visit++;
   SetCookie("visit", visit, expdate, "/", null, false);

   var message;
   if(visit == 1) message=" Benvenuto nelle pagine del mio sito";
   if(visit == 2) message=" Bentornato mister";
   if(visit == 3) message=" Mi fa piacere rivederti";
   if(visit == 4) message=" Oh, chi si rivede!";
   if(visit == 5) message=" Qui puoi inserire un messaggio a piacere";
   if(visit == 6) message=" Qui puoi inserire un altro messaggio";
   alert("\\n"+"Hai visitato questa pagina\\n"+""+visit+" "+"volte."+"\\n"+"\\n"+message);
  }

 function ResetCounts()  {
   var expdate = new Date();
   expdate.setTime(expdate.getTime() + (24 \* 60 \* 60 \* 1000 \* 365));
   visit = 0;
   SetCookie("visit", visit, expdate , "/", null, false);
   leapto();
  }

 // -->

 </script>

Perché lo script funzioni correttamente è necessario inserire all’interno del tag il codice:

1
onload = "DisplayInfo()";

Onload è un gestore di eventi che richiama, una volta che la pagina è stata caricata, la funzione “displayInfo”. Tale gestore di eventi è disponibile dalla versione 2 di Netscape Navigator.

La visualizzazione del numero di passaggi di una persona avviene tramite la finestra di avviso del browser.

La personalizzazione di questo script è abbastanza semplice e permette di scegliere messaggi di testo da associare ad ogni apertura della pagina. Nel codice esaminato sono impostati sei messaggi che accompagnano altrettante visualizzazioni. Il primo di questi messaggi è contenuto nella riga di codice:

1
if (visit == 1) message = "Benvenuto nelle pagine del mio sito ";

Per aggiungere altri messaggi, oltre ai sei stabiliti in questo esempio, è sufficiente inserire altre righe di codice che seguano la numerazione progessiva. Ecco un esempio:

1
2
if (visit == 7) message = "Settimo messaggio";
if (visit == 8) message = "Ottavo messaggio ";

Il codice successivo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
alert(
	"\\n" +
		"Hai visitato questa pagina\\n" +
		"" +
		visit +
		"" +
		"volte." +
		"\\n" +
		"\\n" +
		message
);

raccoglie le informazioni comunicate dai cookie e le mette di seguito alla frase standard: “Hai visitato questa pagina”, alla quale segue il dato dinamico comunicato dallo script.

“Alert” è un metodo che visualizza una finestra di dialogo con un messaggio di avvertimento ed un pulsante “ok”. I metodi sono, in javascript, particolari tipi di funzioni associati ad oggetti, che richiedono argomenti. Come le funzioni, anche i metodi sono costituiti da una parola seguita da una coppia di parentesi.

L’istruzione “var” viene utilizzata per dichiarare delle variabili, mentre il metodo “setTime()” viene utilizzato per assegnare le relazioni tra gli oggetti “date”. Questo metodo imposta o ripristina il numero di millisecondi trascorsi dal primo gennaio 1970.

Sulla falsariga dell’esempio citato in questo articolo, e sfruttando nuovamente le potenzialità dei cookie, è possibile richiedere il nome agli utenti e memorizzare la risposta per le future visite. Ecco la sintassi:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<SCRIPT LANGUAGE="JavaScript">
<!--

  var username = GetCookie('username');
  var dom = GetCookie('MyDomain');

  if (username == null) {
     username = prompt('Scrivi il tuo nome',"");
     if (username == null) {
       alert('Se non scrivi il tuo nome, sarai Anonimo.');
       username = 'Anonimo';
     } else {
       pathname = location.pathname;
       MyDomain = pathname.substring(0,pathname.lastIndexOf('/')) +'/';
       var largeExpDate = new Date ();
       largeExpDate.setTime(largeExpDate.getTime() + (365 \* 24 \* 3600 \* 1000));
       SetCookie('username',username);
     }
   }

  function getCookieVal (offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1)
      endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
   }

  function GetCookie (name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
      var j = i + alen;
      if (document.cookie.substring(i, j) == arg)
        return getCookieVal (j);
      i = document.cookie.indexOf(" ", i) + 1;
      if (i == 0)
        break;
    }
    return null;
  }

  function SetCookie (name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv\[2\] : null;
    var path = (argc > 3) ? argv\[3\] : null;
    var domain = (argc > 4) ? argv\[4\] : null;
    var secure = (argc > 5) ? argv\[5\] : false;

    document.cookie = name + "=" + escape (value) + ((expires == null) ? "" :
      ("; expires=" + expires.toGMTString())) + ((path == null) ? "" :
      ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) +
      ((secure == true) ? "; secure" : "");
  }

  document.write('<font face=arial size=6>Ciao '+username+' !</font> ');

//-->

</SCRIPT>

Molto simile al precedente, questo script è semplice da impostare e da personalizzare. Il codice va inserito all’interno dei tag e non all’interno dei tag .

La grandezza del testo che viene visualizzato sulla pagina HTML è stabilita dalla riga di codice:

1
2
_document.write("<font face=arial size=6>Ciao " + username + " !</font> ");
_;

Nel caso in cui non venga scritto alcun nome, lo script assegna di default la denominazione “anonimo”.