Cookies

Bare rolig – Privat Computer har ikke indført en ny sektion med bageopskrifter. I stedet giver Kristian Hansen dig her opskriften på at få din hjemmeside til at gemme oplysninger på de besøgendes harddiske.

Når en bruger, besøger din hjemmeside, har du mulighed for at gemme en cookie på dennes harddisk. En cookie er et stykke information, der gemmes i en fil på brugerens harddisk. Webstedet angiver kun informationen – hvor filen gemmes, og hvad den kommer til at hedde, bestemmes af browseren. Når den samme besøgende på et senere tidspunkt vender tilbage til den samme hjemmeside, er det muligt at hente oplysningerne igen.

Teknikken lyder særdeles simpel og er det egentligt også – alligevel er der mange rygter om, hvad man kan gøre med cookies. For at afkræfte en del af disse beskrives de ting, man ikke kan med cookies, i en tekstboks andetsteds i denne artikel.

Mere interessant er det imidlertid, hvad der er muligt med cookies. Man kan eksempelvis huske den besøgendes navn, så vedkommende ikke behøver indtaste det, hver gang siden besøges. Man kan også huske, hvor mange gange brugeren har besøgt siden. Blandt de mere avancerede er mulighederne for at lade brugeren gemme indstillinger og bogmærker på siden. For eksempel kan man huske, om brugeren foretrækker at se siden på dansk eller engelsk og med eller uden frames.

Scripts

Cookies er ikke en del af HTML-standarden, men derimod en del af de scriptsprog, der bruges sammen med HTML. Det vil sige, at man er nødt til at have et vist kendskab til disse sprog, før man kan anvende cookies. I denne artikel vil JavaScript blive brugt til at vise eksempler, da det er det mest udbredte scriptsprog. JavaScript er blevet gennemgået i Privat Computers store Internetkursus.

Opbygningen af en cookie

Som nævnt er en cookie blot en information. Man kan betragte det som en tekststreng. Der er nogle krav til opbygningen af denne streng. Den skal have følgende opbygning

<navn>=<værdi>; expires=<udløbstidspunkt>.

Navn angiver cookiens navn. Dette navn skal man bruge, når man vil hente cookien igen. Værdien er de informationer, der skal gemmes i cookien, mens udløbstidspunkt angiver, hvor når cookien ikke længere skal være gyldig. Den vil på dette tidspunkt blive slettet fra brugerens harddisk.

Udløbstidpunktet skal angives på GMT-form. Det vil sige, at opbygningen skal være som følger

Dag, dato måned år timer:minutter:sekunder tidszone

Et eksempel på en dato i GMT-form kan være Tue, 22 Sep 1998 20:11:37 UTC. Denne udtryksform kan være lidt besværlig at arbejde med, og man kan derfor med fordel bruge et Date-objekt til at håndtere det. Date-objekter har nemlig en metode, der hedder toGMTString. Den metode konverterer datoen til en tekststreng indeholdende datoen på GMT-form. For at få konverteret det nuværende klokkeslæt til en GMT-streng behøver man således kun at skrive

new Date().toGMTString();

At sætte en cookie

For at sætte en cookie skal man tildele dens værdi til document.cookie-variablen. Det kan man gøre således:

document.cookie = <cookie-streng>

I praksis er det nemmeste at oprette en funktion, der foretager dette stykke arbejde. Så er man fri for selv at skulle opbygge cookie-strengen hver gang, man skal sætte en cookie.

Eksempel 1 viser, hvordan man kan gemme brugerens navn som en cookie. Eksemplet viser også, hvordan man kan sætte udløbsdatoen på baggrund af dags dato. I eksemplet skal cookien udløbe om to dage. Derfor bliver der oprettet et Date-objekt, der angiver dags dato. Til dette bliver der lagt to dage. Herefter bliver det sendt videre til setCookie-metoden, hvor det konverteres til en GMT-streng.

Denne fremgangsmåde overskriver eventuelle tidligere satte cookies fra den side. Hvis man vil tilføje en cookie, skal man tilføje cookie-strengen til document.cookie.

At læse en cookie

Det er lidt mere kompliceret at læse en cookie. Her skal man først finde den rigtige cookie. Det gør man ved at søge efter det navn, man gav cookien, efterfulgt af et lighedstegn. Når man har fundet den pågældende cookie, skal man have sorteret dens navn og udløbstidspunkt fra, så man kun har værdien tilbage. Igen gælder det, at man med fordel kan oprette en funktion, der før arbejdet.

Eksempel 2 viser, hvordan man kan udvide eksempel 1 til at genkende brugeren, hvis denne har været her før. Bemærk at getCookie returnerer null, hvis der ikke kan findes en cookie med det pågældende navn.

Ulemper ved cookies

Det er imidlertid ikke ren lykke at bruge cookies. Man skal være opmærksom på, at der er en del, der opfatter cookies som en sikkerhedsrisiko og derfor slår dem fra i deres browser. Man bør derfor ikke basere hele sit websted på anvendelse af cookies.

Hvad man ikke kan med cookies

  • Det er ikke muligt at sprede virus gennem cookies.
  • Det er ikke muligt at lave en tæller ved hjælp af cookies – man kan kun tælle, hvor mange gange den pågældende bruger har besøgt siden.
  • Det er ikke muligt at læse andre informationer fra brugerens harddisk end de, der er gemt i cookie’en.
  • Det er ikke muligt at læse cookies fra en anden hjemmeside.

Eksempel 1: at gemme brugerens navn

<HTML>
<HEAD>
<TITLE>Indtast dit navn</TITLE>
<BODY>
<SCRIPT>
  brugernavn = prompt ("Hvad er dit navn?", "Anonym");
  expires = new Date();
  expires.setDate (expires.getDate() + 2);
  setCookie ("bruger", brugernavn, expires);
 
  function setCookie (name, value, expires) {
    document.cookie = name + "=" + escape (value) + "; expires=" + expires.toGMTString();
  }
</SCRIPT>
</BODY>
</HTML>

Eksempel 2: at hente brugerens navn

<HTML>
<HEAD>
<TITLE>Indtast dit navn</TITLE>
<BODY>
<SCRIPT>
    navn = getCookie ("bruger");
    if (navn == null) {
        navn = hentNavn();
    }
    document.writeln ("Hejsa " + navn + ". Velkommen til min hjemmeside...");
 
    function hentNavn() {
      brugernavn = prompt ("Hvad er dit navn?", "Anonym");
      expires = new Date();
      expires.setDate (expires.getDate() + 2);
      setCookie ("bruger", brugernavn, expires);
      return brugernavn;
    }
 
    function setCookie (name, value, expires) {
      document.cookie = name + "=" + escape (value) + "; expires=" + expires.toGMTString();
    }
   
        function getCookie (name)
        {
          arg = name + "=";
          argLength = arg.length;
          cookieLength = document.cookie.length;
 
          i = 0;
          while (i < cookieLength)
          {
            j = i + argLength;
            if (document.cookie.substring (i,j) == arg)
            return getCookieVal (j);
 
            i = document.cookie.indexOf (" ", i) + 1;
 
            if (i == 0) // cookie kunne ikke findes
            break;
          }
          return null;
        }
 
        function getCookieVal (offset)
        {
          endIndex = document.cookie.indexOf (";", offset);
          if (endIndex == -1)
          endIndex = document.cookie.length;
 
          return unescape (document.cookie.substring (offset, endIndex));
        }
   
</SCRIPT>
</BODY>
</HTML>
 

Comments are closed.