Till Startsidan
JavaScript.nu hostas av Ballou.se

Skaffa webbhotell
Från 12 kr/månad.

100 kr rabatt för JavaScript.nu-
besökare.

LÄR DIG HUR MAN HANTERAR COOKIES (KAKOR)

Om kakor
Spara kakor
Hämta kakor
Radera kakor
Är kakor farliga?

Kakor, eller engelskans cookies, är en bit information som kan sparas på en besökares dator av en webbläsare för att sedan kunna återhämtas vid besökarens nästa besök. Nyttan med dessa kakor är att webbplatsen kan göra speciella inställningar för varje besökare. Dvs, besökaren kan ange hur han vill att sidan ska se ut, och så kan sidan som sparat kakorna känna av besökaren vid nästa besök för att sedan göra sidan på det sätt som beskrivs i kakan. Kakor kan även vara bra för annat. Låt oss säga att en hemsida ska vara skyddad med lösenord. Då kan man skapa ett script som lagrar en kaka då en besökare anger rätt kod och sedan så skickas besökaren iväg till den hemliga sidan. Den hemliga sidan känner av kakan och märker om kakan innehåller den sak som den ska innehålla. Om den innehåller rätt sak, då visar sidan. Finns inte kakan, eller om innehållet i kakan är fel, då visas inte sidan. Dessa är bara några av många användningsområden kakor har.

Kakor kan skapas på olika sätt. Vi ska visa hur man gör det med JavaScript och Perl (CGI):

JavaScript:
document.cookie="KakansNamn=Värdet På Kakan";                                          //Försvinner när webbläsaren stängs
document.cookie="KakansNamn=Värdet På Kakan; expires="+datum_da_kakan_forsvinner;      //Försvinner när det bestämda datumet har gått ut

Perl
print "Set-Cookie: KakansNamn=Värdet På Kakan\n";                                      #Försvinner när att webbläsaren stängs
print "Set-Cookie: KakansNamn=Värdet På Kakan; expires=$datum_da_kakan_forsvinner\n";  #Försvinner när det bestämda datumet har gått ut
Mycket svårare är det inte att spara en kaka, fast bara koderna ovan säger inte så mycket om kakan, så låt oss titta lite närmare på hur du kan skapa en fullständig funktion för att spara en kaka i JavaScript:
<SCRIPT LANGUAGE="JavaScript">
<!--
//Don't remove this line: Script by Omid Rouhani, from www.JavaScript.nu
function spara(namn, innehall, lagringstid)             //Funktionshuvud
{
lagringstid=parseInt(eval(lagringstid));                //Räknar ut och avrundar lagringstid's innehåll, t.ex. om det skickats som en sträng och inte som ett tal
 if (lagringstid+""=="NaN")                             //Om inget värde har givits åt lagringstid när funktionen anropades...
 {
  datumsnutt="";                                        //Så får datumsnutt ett tomt värde.
 }
 else                                                   //Om ett värde har givits åt lagringstid när funktionen anropades...
 {
  var datum = new Date();                                //Så deklareras datum, värdet blir dagens datum.
  datum.setTime(datum.getTime() + lagringstid);          //Datumet i datum ökar med det antal millisekunder som datum fått.
  datum=datum.toGMTString();                             //Vi gör om datumet till GMT-tid.
  datumsnutt="; expires="+datum;                         //Datumsnutt får värdet ; expires=DATUM
 }
document.cookie=namn+"="+escape(innehall)+datumsnutt;    //Sparar kakan genom att tilldela document.cookie värdet kaknamnet, likamedtecken, kakvärdet i escape:ad form samt datumsnutten (är datumsnutt tomt så lagras kakan tills webbläsaren stängs).
}


spara("Namn","Sven Svensson",1000*60*60*24*365);         //Anropar funktionen spara och lagrar Sven Svensson i kakan Namn. Kakan lagras i ett år (1 millisekund * 1000 (=1 sekund)*60 (=1 minut)*60 (=1 timme)*24 (=1 dygn)*365 (=1 år)).
spara("BesoksID","00058358");                            //Anropar funktionen spara och lagrar 00058358 i kakan BesoksID. Kakan lagras tills dess att webbläsaren stängs.
spara("Onodig_kaka");                                    //Anropar funktionen spara och lagrar undefined i kakan Onodig_kaka. Även denna kaka lagras tills dess att webbläsaren stängs.
//-->
</SCRIPT>
Så lätt sparar man kakor. Om du, som jag misstänker, även vill kunna komma åt kakorna kan du använda detta script:
<SCRIPT LANGUAGE="JavaScript">
<!--
//Don't remove this line: Script by Omid Rouhani, from www.JavaScript.nu
function hamta(namn)                                            //Funktionshuvud
{
kakor=document.cookie;                                          //Lagrar innehållet i document.cookie i kakor
kakor_delar=kakor.split("; ");                                  //Deklarerar en array med namnet kakor_delar
for (raknare_i=0;raknare_i<kakor_delar.length;raknare_i++)      //Startar en loop som pågår som max tills alla kakor_delar's delar har lästs
{
tva_delar=kakor_delar[raknare_i].split("=");                    //Skapar arrayen tva_delar, som namnet säger innehåller två delar - namnet på kakan i index 0 och dess värde i index 1
if (tva_delar[0]==namn)                                         //Om kakans namn motsvarar namn...
{
return unescape(tva_delar[1]);                                  //Så returneras kakans värde, i ett unescape:at format
}
}
return "";                                                      //Om kakan inte hittades så returnerar scriptet en tom sträng
}


namnet=hamta("Namn");                                           //Hämtar kakan Namn's innehåll (=Sven Svensson) och deklarerar variabeln namnet med kakans värde 
tom_variabel=hamta("KakaSomInteFinns");                         //Försöker hämta kakan KakaSomInteFinns, fast då denna kaka inte finns så returneras en tom sträng, som tilldelas tom_variabel
//-->
</SCRIPT>


Script för Perl:
#!/usr/bin/perl

sub se_kaka	#Don't remove this line: Script by Omid Rouhani, from www.JavaScript.nu
{
$kaknamnet = $_[0];					#Lagrar första argumentet till funktionen
	@allakakor=split("; ", "$ENV{'HTTP_COOKIE'}");	#Lagrar alla kakorna i en array

	foreach $kaka (@allakakor)			#Loopar tills kakan hittats
	{
	($namn, $varde)=split(/=/,"$kaka");		#"kaknamn=kakvärde" splitras in i två olika variabler
	
		if ($namn eq "$kaknamnet")		#Om kakan är den vi efterfrågat
		{
		return "$varde";			#Ska dess värde returneras
		}
	}
return 0;						#Om kakan inte finns returneras noll
}

$MinKaka=&se_kaka('bookmark');				#Lagrar kakans värde i en variabel

	#[Resten av scriptet kan skrivas här]
Om du inte riktigt hängt med så beror det nog på att du inte vetat hur document.cookie hanterar innehållet i kakorna. Innehållet lagras som en sträng i detta format:
kaka1=innehåll1; kaka2=innehåll2; kaka3=innehåll3

Perl lagrar kakor i ett likadant format, fast istället för document.cookies så lagras strängen i:
$ENV{'HTTP_COOKIE'}


Vill du radera en kaka som du sparat så är det bara att spara den med ett datum som redan passerat. Med denna funktion kan det lätt göras på rätt sätt:
<SCRIPT LANGUAGE="JavaScript">
<!--
//Don't remove this line: Script by Omid Rouhani, from www.JavaScript.nu
function radera(namn)                                                 //Funktionshuvud
{
if(document.cookie.indexOf(namn+"=")!=-1 ||
   document.cookie.indexOf(namn+";")!=-1 ||
   document.cookie.substring(document.cookie.length-namn.length-2,document.cookie.length)=="; "+namn ||
   document.cookie==namn)                                             //Om kakan finns ska den raderas...
{
var datum = new Date();                                               //Dagens datum...
datum.setTime(datum.getTime() - 1000*60*60*24*365*30);                //Minus trettio år...
datum=datum.toGMTString();                                            //I GSM-tid

if (navigator.appName=="Netscape")                                    //Om man har Netscape...
document.cookie=namn+"=; expires=Thu, 01-Jan-70 00:00:01 GMT";        //Så ska den raderas såhär
else
document.cookie=namn+"=; expires="+datum;                             //Annars ska den raderas såhär
}
}


radera("MinKaka");                                                    //Raderar kakan MinKaka om den finns, om den inte finns händer inget.
//-->
</SCRIPT>

Ibland kan man höra att kakor kan vara farliga. Detta är fel. Kakor är endast en bit text som lagras på datorn. Webbläsaren bestämmer dess storlek och försäkrar sig om att informationen inte kan komma i fel händer. Dvs, man kan inte få virus eller liknande genom kakor.
Det som däremot kan vara integritetskränkande är att personlig information om dig kan sparas i kakorna och att denna information sedan används av sidor du själv inte vill. Om du t.ex. någonstans anger ditt kön, namn, ålder, vart du bor etc. så kan annonsörer använda sig av denna information, som du har gömd i en kaka, för att visa dig en annons som de tror lockar dig.
Har du lagt märke till att svenska annonsbanners ibland dyker upp på engelska sidor? Då beror det med största sannolikhet på att annonsvisaren, dvs inte nödvändigt sidan du besöker, utan den server som bilden (annonsen) finns på och som hanterar annonsvisningarna har informationen att du bor i Sverige lagrad på din dator.






Copyright © Omid Rouhani 1997-2010; Alla rättigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]