CMS-kursen

Kakor

En kaka är ett litet värde som sparas i besökarens webbläsare och skickas med vid varje anrop.

Webben har inget minne

Varje anrop till en webbserver är fristående. Servern vet inte att det är samma besökare som nyss var inne på en annan sida. Kakor (cookies) är ett sätt att komma ihåg något mellan anropen.

  1. Servern ber webbläsaren spara ett värde med setcookie().
  2. Webbläsaren sparar kakan och skickar med den vid nästa anrop.
  3. PHP lägger de medskickade kakorna i $_COOKIE.

Sätta och läsa en kaka

setcookie("namn", "Henrik", time() + 3600);

De tre värdena är kakans namn, dess värde och när den slutar gälla. time() är klockslaget just nu i sekunder, så time() + 3600 betyder om en timme.

Kör koden, skriv ett namn och skicka. Raden Kakor under adressfältet visar vad webbläsaren har sparat.

Två saker att se upp med

Kakan syns först vid nästa anrop. setcookie() ber bara webbläsaren att spara kakan. $_COOKIE innehåller det som webbläsaren skickade med i det här anropet. Därför skickar koden besökaren vidare med header("Location: ..."), så att sidan hämtas på nytt med kakan.

setcookie() måste anropas före all utskrift. Kakor skickas i sidhuvudet (HTTP-headers), som går iväg innan sidans innehåll. Har sidan redan skrivit ut något, även ett mellanslag före <?php, får du varningen headers already sent.

Ta bort en kaka

Det finns inget kommando för att ta bort en kaka. I stället sätter du den igen med en tid som redan har passerat:

setcookie("namn", "", time() - 3600);

Prova själv

  1. Tryck på Ny besökare. Vad händer med hälsningen, och varför?
  2. Lägg till en länk “Glöm mig” som tar bort kakan. Tips: länka till ?glom=1 och kontrollera isset($_GET['glom']) överst.
  3. Flytta setcookie() till efter HTML-koden. Vilken varning får du?

Kakor är inte hemliga

Kakor sparas hos besökaren, som kan läsa och ändra dem. Spara därför aldrig lösenord eller annat känsligt i en kaka, och lita inte på värdet: tvätta det som all annan indata.

Kakor som inte är nödvändiga för att webbplatsen ska fungera kräver besökarens samtycke enligt lag. Det är därför webbplatser har kakbanderoller.