HTTP COOKIE
En cookie (webb-kaka) är ett stycke text som lagras i användares webbläsare. En cookie kan användas för autentisering, lagring av preferenser, en shoppingvagns innehåll, identifieraren för en server-baserad session, eller något annat som kan uppnås genom att lagra TEXT data.
En cookie består av ett eller flera namn-värdepar som kan innehålla olika slags information. Informationen kan vara krypterad av säkerhetsskäl. En cookie skickas från webbservern som en del av HTTP-headern.
Cookies kan vara med eller utan ett utgångsdatum. Cookies utan ett utgångsdatum existerar tills webbläsaren avslutas, medan kakor med ett utgångsdatum får lagras av webbläsaren fram till det utgångsdatum passerar. Användare kan också manuellt ta bort cookies för att spara plats eller för att undvika integritetsfrågor.
Cookies är ren text och kan öppnas och läsas av enklaste textredigerare. Cookies är ingen körbar fil och som sådan kan den inte replikera sig själva och är därför inget virus. Men på grund av webbläsaren mekanism för att ställa in och läsa cookies kan de användas som spionprogram. Anti-spyware-produkter kan varna användare om kakor eftersom cookies kan användas för att spåra personer. Se parametrarna "Secure" och "HttpOnly" längre ner.
De flesta moderna webbläsare tillåter användaren att avgöra om du accepterar cookies och tidsramen för att behålla dem. Att avvisa cookies gör vissa webbplatser obrukbara.
Set-Cookie Standarden
http://tools.ietf.org/html/rfc2109
Syntaxen för Set-Cookie i http response huvudet är:
set-cookie |
"Set_Cookie:" [cookies] |
cookies |
1#cookie |
cookie |
NAMN "=" VÄRDE (en lista separerad med ";" [semikolon]) |
NAME |
attribut |
VALUE |
värde |
cookie-av |
"Comment" "=" value "Domain" "=" value "Max-Age" "=" value "Path" "=" value "Secure" "Version" "=" 1*DIGIT |
Set-Cookie skrivs i HTTP huvudet med "Set-Cookie:", följt av en kommaseparerad [,] lista med en eller flera cookies. Varje cookie börjar med ett NAME = VALUE-par, följt av noll eller fler semikolon-separerad [;] attribut-värdepar. Syntaxen för attribut-värdepar visades tidigare. Kakans NAMN = VÄRDE attribut- värdepar måste komma först i varje kaka. De andra, om det finns, kan förekomma i vilken ordning som helst. Om ett attribut förekommer mer än en gång i en cookie, är beteendet odefinierat.
NAME=VALUE |
Obligatoriskt. Namnet på informationen ("cookie") är NAME, och dess värde är VALUE. Namn som börjar med $ är reserverade för andra ändamål och får inte användas av applikationer. Värdet är ogenomskinlig för klienten och kan vara allt det ursprungsservern väljer att skicka, vanligtvis ASCII-kodad text. "Ogenomskinlig" innebär att innehållet är av intresse och relevans endast för ursprungsservern. Innehållet kan i själva verket vara läsbara för alla som granskar "Set-Cookie" sidhuvudet. |
Comment=comment |
Valfritt. Eftersom cookies kan innehålla privat information om en användare så ger cookieattributet möjlighet att ge information till användaren om avsikten med kakan. |
Domain=domain |
Valfritt. Domain attributet anger domänen för vilken kakan är giltig. Ett tydligt angivet domännamn måste alltid börja med en punkt. T.ex.
domain=.heap.se |
Max-Age=delta-seconds
|
Valfritt. Max-Age attributet definierar cookiens livslängd i sekunder. Delta-sekunder värdet är ett decimaltal icke-negativt heltal. Efter "delta-sekunder" sekunder förflutit bör klienten kasta cookien. Ett värde på noll innebär cookien ska kasseras omedelbart. |
Path=path |
Valfritt. Path attributet anger den delmängd av webbadresser som denna kaka gäller. |
Secure |
Valfritt. Secure attributet (utan extra parameter) leder klienten att endast använda säkra metoder för att kontakta ursprungsservern när den skickar tillbaka denna cookie, t.ex. https://... |
HttpOnly |
Valfritt (utan parameter), men viktigt för säkerheten. Denna parameter gör att kakan inte kan läsas av JavaScript som finns hos klienten. Detta skulle kunna innebära att innehållet i kakan kan skickas vidare till obehörig part. |
Version=version |
Obligatoriskt. Version attribut, ett heltal, identifierar vilken version av specifikationen cookien uppfyller kraven. För denna specifikation gäller: Version=1 |
Skriva Cookies i Perl
I ett CGI program, skrivet i Perl (PHP undantaget), så börjar man normalt sett skriva ut vilken typ av information som ska visas i webbläsaren. Huvudtyperna är TEXT eller BINMODE men för webben specificerar man även MIME-typen. Läs mer om olika MIME typer här. För att leverera en kaka så gör man det vanligtvis via en CGI genererad webbsida. Exempel för SSL (https://...), innan HTML koden skriver man:
print "Set-Cookie: kaknamn=hejsan; path=/; expires=Fri Dec 2 22:47:39 2011 GMT; version=1; Secure; HttpOnly\n";
print "Content-Type: text/html; charset=utf-8\n\n";
print "<!DOCTYPE html>\n";
print "<html><head>osv...";
Om man vill att kakan ska försvinna så sätter man expires=0 (siffran 0).
Skriva Cookies i PHP
<?php setcookie('kaknamn', 'hejsan', time() + 300); ?>
<!DOCTYPE html>
<html>
<head>
bla..
</head>
<body>osv..
Länkar och relaterade dokument:
Cache-Control (denna site)
Sarafi cookie problem (denna site)
http://www.w3.org/International/O-HTTP-charset
[•]