Gennemgang Af Cookies Og Sessions

En cookie kan kort beskrives som et lille stykke data, som et website kan vælge at gemme på brugernes computere, hvorefter det sendes tilbage til websitet hver gang brugeren besøger det.

Historie

Web cookies eller helt præcist HTTP cookies blev første gang introduceret til webprogrammering i 1994 af en ansat ved Netscape (browseren Netscape Navigator blev benyttet af mere end 80% i 1995, kilde Dataquest). Netscape skulle dengang udvikle en webshop og man ønskede en måde, hvorpå man kunne gemme brugernes tilstand på deres egen computer, for at gemme hvilke varer brugeren havde lagt i indkøbskurven.

Året efter i 1995 integrerede Microsoft også brugen af cookies i deres browser Internet Explorer. I begyndelsen kendte offentligheden ikke rigtigt til brugen af cookies, og browserne var som standard sat op til at tillade dem fuldt ud. Først senere efter offentlighedens bekymring omkring brugen af cookies, er det blevet muligt at ændre indstillingerne for brugen af cookies i sin browser.

I 1996 og 1997 blev brugen af cookies diskuteret i to høringer ved U.S. Federal Trade Commision, og man lavede nogle anbefalinger for brugen af cookies. Netscape og Internet Explorer ignorerede dem dog og det blev nærmere reglen end undtagelsen at mange annoncører og reklamer på nettet begyndte at bruge cookies for at aflæse brugernes bevægelser på internettet. I 2000 blev der udfærdiget nogle nye anbefalinger, men først i 2011 indførte EU og USA skrappere regler på området. Reglerne betyder grundlæggende, at websites skal informere brugerne om brugen af cookies på deres sider. Reglerne bliver endnu ikke håndhævet fuldt ud i dag, men websites som blandt andet home.dk og ekstrabladet.dk gør opmærksom på brugen af cookies på deres sider.

Hvad bruges Cookies til?

Cookies bruges typisk til følgende

  • Er en bruger logget ind eller ej
  • Indkøbskurv
  • Gemme brugernavnet til næste gang brugeren skal logge ind
  • Huske andre personlige indstillinger (fx hvis man har valgt et bestemt sprog, indtastet at man bor i en bestemt by eller at man kun søger lejligheder og ikke huse)
  • Tracking af bevægelses mønstre (hvilke sider har man besøgt, hvornår, hvor lang tid osv.)

Opgaver

  • Giv andre eksempler end i teksten på hvad cookies kan bruges til?
  • Nævn nogle websites du kender, som benytter cookies og hvad de benytter dem til?

Forskellige typer Cookies

Overordnet skelner man mellem to forskellige typer cookies; persistent og session cookies.

Persistent cookie

En persistent cookie er vedvarende og gemmes på brugerens computer. Et website kan definere en udløbsdato for deres cookie til fx et år, hvilket betyder, at cookien bliver gemt på ens computer i et år medmindre man selv sletter den.

Session cookie

En session cookie er en midlertidig cookie, der normalt kun eksisterer på brugerens computer, imens man besøger et website eller lukker browseren. Denne form for cookie gemmes i memory (ram) på computeren og ikke harddisken.

Andre typer

Der findes også andre mere specifikke typer cookies, som typisk er en underkategori til ovenstående typer cookies.

  • Third-party cookie

Kan fx bruges til at spore og opbygge brugernes bevægelseshistorik på nettet. Benyttes typisk af annoncører, der ønsker at målrette deres reklame. Hvis du fx har besøgt et website omhandlende ski, viser de reklamer for køb af skiudstyr. Hvis du har besøgt hjemmesider om heste, viser de reklamer til det segment.
Hvis man ikke ønsker, at websites skal kunne spore dig på tværs af hjemmesider, kan man fjerne tilladelsen af third-party cookies i ens browser. Det betyder, at når man fx er på siden www.mitwebsite.dk, er det ikke muligt at lave en third-party cookie på din computer for fx en annoncør www.reklamer.dk.

  • Secure cookie

En sikker cookie bør man benytte, hvis man gemmer følsom data i ens cookie. Ved at lave en secure cookie sørger man for, at cookien altid bliver sendt krypteret til serveren.

  • HttpOnly cookie

Denne type cookie betyder, at cookien kun kan benyttes, når man sender over HTTP eller HTTPS. Det betyder at kode fra fx Javascript eller Flash ikke kan få adgang til at læse cookien.

  • samt flere typer cookies, som vi ikke vil behandle her.

Opgaver

  • Kategoriser de 5 forskellige brugstyper (logget ind, indkøbskurv, gemme brugernavn, huske personlige indstillinger og tracking) efter hvilken type cookie, der er mest oplagt at benytte til opgaven (persistent eller session)?

Implementering af persistente cookies i PHP

Følgende afsnit vil gennemgå funktioner til at oprette, læse og slette persistente cookies i PHP.

Opret en cookie

For at oprette en cookie skal man benytte funktionen setcookie(). Det er vigtigt, at man husker at kalde funktionen før <html> tagget.

Følgende eksempel gemmer en cookie på brugerens computer med navnet på vedkommende.

<?php
setcookie("name", "Jens Jensen", time()+60*60*24*30);
?>

<html>
..... 
</html>

Funktionen time() giver os det nuværende tidspunkt, og dertil lægger vi det antal sekunder, vi ønsker, før cookien skal udløbe og slettes. 60*60*24*30 er 60 sekunder * 60 minutter * 24 timer * 30 dage, hvilket gør at cookien udløber om præcist 30 dage.

Læs en cookie

Når vi skal læse vores cookie igen, gør vi det via et opslag i $_COOKIE variablen. Idet brugeren nødvendigvis ikke har besøgt vores side før eller at cookien er udløbet, er det ikke sikkert, at den cookie vi forsøger at læse, eksisterer på brugerens computer. Derfor bør man tjekke om cookien findes ved at kalde funktionen isset().

Følgende eksempel tjekker først om cookien eksisterer, og skriver derefter et output til brugeren baseret på cookien.

<html>
<body>

<?php
if (isset($_COOKIE["name"]))
  echo "Velkommen tilbage " . $_COOKIE["name"];
else
  echo "Velkommen gæst";
?>

</body>
</html>

Slet en cookie

Hvis vi ønsker at slette en cookie, kan man gøre det meget simpelt ved at skrive til cookien, dog med et udløbstidspunkt der allerede har fundet sted. På den måde vil den eksisterende cookie blive overskrevet. I dette eksempel sætter vi udløbstidspunktet for en time siden.

<?php
setcookie("name", "", time()-60*60);
?>

Opgaver

Vi repræsenterer en online tøjbutik, og vil gerne henvende os til det køn, der besøger vores website for at vise aktuelle tilbud og nye kollektioner. Hvis brugeren aldrig har besøgt vores hjemmeside før, kender vi ikke kønnet på personen. Hvis brugeren ikke har besøgt os før, bliver vedkommende bedt om at vælge tøj for enten mænd eller kvinder, og dermed kender vi brugerens køn til fremtiden.
Skriv noget PHP kode, der gør følgende:

  • En bruger har netop valgt tøj for kvinder. Skriv en cookie, der gemmer hendes køn i et år.
  • En bruger er tilbagevendt til vores website. Skriv noget kode, der skriver "Tøjafdelingen for mænd" eller "Tøjafdelingen for kvinder" alt efter hvilket køn, der er gemt i cookien.
  • Udvid ovenstående kode med følgende tekst, hvis brugeren aldrig har besøgt vores website før: "Velkommen. Vælg venligst tøjafdeling".

Implementering af session cookies i PHP

Session cookies benyttes som sagt kun til at gemme midlertidig tilstand, som kun er tilgængelig imens brugerens browser er åben. Det betyder også, at programmeringen foregår på en lidt anderledes måde end ved de persistente cookies.

Opret session

Før man kan begynde at læse og skrive til en session, skal man åbne sessionen først. Det gør man ved at kalde funktionen session_start(). Derefter kan man læse og skrive til ens session igennem $_SESSION variablen. Følgende eksempel er en simpel tæller, der tæller, hvor mange gange brugeren har vist den samme siden i denne session (typisk så længe ens browser/computer er tændt).

<?php
session_start();

if(isset($_SESSION['visninger']))
$_SESSION['visninger'] = $_SESSION['visninger'] + 1;
else
$_SESSION['visninger'] = 1;

echo "Antal visninger: " .  $_SESSION['visninger'];
?>

Opgaver

  • Ovenstående eksempel vil ikke virke, hvis vi ønsker, at tælle antal visninger brugeren har haft i løbet af en uge. Forklar hvordan man kunne lave en tæller til dette?
  • I stil med ovenstående eksempel skriv noget kode, der i sessionen tjekker, om brugeren er logget ind eller ej i stedet for at tælle antal visninger. Skriv følgende beskeder til brugeren alt efter status: "Du er ikke logget ind" eller "Du er logget ind".

Luk session

Man har to muligheder for at lukke eller slette/nulstille en session. Alt efter behovet bør man vælge den metode, der passer bedst til situationen.

Funktionen session_destroy() lukker hele sessionen og sletter alt, hvad man har gemt i den. Det bør bruges, når man ønsker, at nulstille al tilstand i ens session. Det kunne fx være, hvis en bruger trykker på "Log ud", så ønsker man at nulstille hele sessionen, da vi måske både har gemt information om at brugeren er logget ind, brugerens indkøbskurv mv.

<?php
session_destroy();
?>

Hvis vi ikke ønsker at nulstille alt i sessionen, men blot ønsker at nulstille en bestemt værdi, kan det gøres med unset() funktionen. Det kunne fx være, hvis vi ønsker at nulstille antal visninger, tømme indkøbskurven men ikke logge brugeren ud osv.

<?php
session_start();
if(isset($_SESSION['visninger']))
  unset($_SESSION['visninger']);
?>

Lovgivning om brugen af cookies

Læs mere om bekendtgørelsen om krav til information og samtykke ved lagring af eller adgang til oplysninger i slutbrugeres terminaludstyr:
https://www.retsinformation.dk/Forms/R0710.aspx?id=139279

Erhvervs- og Vækstministeriets vejledning om nye regler om lagring af cookies og lignende teknologier:
https://www.retsinformation.dk/Forms/R0710.aspx?id=140089&exp=1

Medmindre andet er angivet, er indholdet af denne side licenseret under Creative Commons Attribution-NonCommercial 3.0 License