Cookies med Common Gateway Interface og JavaScript

Cookies kan sættes ved hjælp af både CGI-programmer og JavaScript. I det efterfølgende vil vi kort opsummere forskellen i disse to måder at sætte en cookie på.

Cookies med CGI

Ønsker man at sætte en cookie hos klienten med et CGI-program, skal CGI-programmet som en del af HTTP Requestet fra klienten generere en HTTP Response Header indeholdende en Set-Cookie HTTP Response Header, som sendes til klienten. Når klienten modtager denne HTTP Response Header, sørger browseren for at generere en cookie.

Hvis man ønsker at læse cookies fra en klient med et CGI-program, skal man skrive et CGI-program, som kan læse informationerne i Cookie HTTP Request Headeren, som findes i HTTP Request Headeren afsendt af browseren. CGI-programmet skal læse environment-variablen HTTP_COOKIE, som netop indeholder værdien for Cookie HTTP Request Headeren. Såfremt HTTP_COOKIE indeholder flere cookies er de adskilt af semikolon (;). Man kan så kode et program, der kan opsplitte CGI environment-variablen HTTP_COOKIE i flere variable.

Man kan for eksempel benytte sig af Matthew M. Wright's Public Domain PERL-bibliotek [www.worldwidemart.com/scripts/cookielib.shtml], der indeholder cookie-funktioner, som kan inkluderes i PERL Scripts. Dette bibliotek indeholder blandt andet funktionerne SetCookie, GetCookie og DeleteCookie, så man nemt kan manipulere med cookies og deres værdier. Her finder man også en udførlig beskrivelse af brugen af biblioteket, og vi vil derfor ikke uddybe dette nærmere.

Cookies med JavaScript

JavaScript tilbyder i modsætning til CGI-programmer mulighed for at sætte cookies og udnytte dem uden forbindelse til serveren. Her gennemgås kort JavaScript-objektet document's property kaldet cookie, som benyttes til at læse og skrive en cookie.

Når man ønsker at sætte en cookie, angiver man med document.cookie navnet på den ønskede cookie og dennes værdi samt yderligere oplysninger. Det sker efter formen:

document.cookie = "name=VALUE; expires=DATE;
  path=PATH; domain=DOMAIN_NAME; secure"

Her har de enkelte parametre samme betydning som for Set-Cookie HTTP Response Headeren.

Ønsker man at læse en cookie, benytter man igen document.cookie, som her returnerer den samlede liste af cookies som en streng. Denne streng har formatet:

name1=VALUE1; name2=VALUE2; ...

Man skal derefter søge i denne streng efter navnet og værdien på den ønskede cookie. På Internettet findes Public Domain JavaScript-funktioner [www.hidaho.com/cookies/cookie.txt], som man inkluderer i sin HTML-fil, hvorefter man kan benytte mere brugervenlige funktioner til at læse og sætte cookies. Public Domain funktionerne SetCookie og GetCookie er meget anvendt, fordi de forenkler brugen af cookies. Ønsker man at sætte en cookie, skal man blot angive SetCookie("name"; "VALUE"), hvorefter denne funktion sørger for at benytte document.cookie. Vil man så læse denne cookie, benytter man GetCookie("name"), som så sørger for at gennemløbe strengen returneret med document.cookie for at finde den ønskede cookie.

I modsætning til CGI-programmer håndtering af cookies, læser og skriver JavaScript cookie-information direkte fra og til cookie-filerne på harddisken. Det betyder, at cookies sat med JavaScript ikke har indflydelse på HTTP Response Headeren. Dette er blandt andet årsagen til, at web-sider med cookies sat med JavaScript kan benyttes off-line. Vores eksempel viser dette, da den ønskede side (oversigt.htm) sætter cookies med JavaScript, hvilket ikke ses i HTTP Response Headeren fra serveren.

« Teori: Client-side vs. Server-side cookies - Teori: Cookies i Netscape Navigator og Microsoft Internet Explorer »