6. Cookies en sessies

In vele websites wil je tijdelijk gegevens over de gebruiker opslaan, zoals reeds bezochte pagina's, aangeklikte links, bestelde artikelen, ...
Daarvoor bestaan twee technieken: cookies en sessies.

6.1. Cookies

Cookies zijn tekstbestandjes die op de computer van de gebruiker opgeslagen worden. Of ze enkel tijdens het bezoek bestaan of langer bewaard blijven, hangt af van de levensduur die je in PHP meegeeft.

Een cookie wordt meegestuurd in de header van de pagina; praktisch betekent dit, dat je alle cookie-acties moet uitvoeren vóór er enige HTML komt, boven <html> in de code dus.

Commando: setcookie(naam, [waarde], [levensduur]);
bv: setcookie("mijncookie", "mijnwaarde",time()+60);
maakt een variabele $mijncookie met waarde "mijnwaarde" en laat de cookie 60 seconden bestaan.

Pas op: variable $mijncookie bevat pas de opgegeven waarde als de pagina opnieuw geladen wordt!

Je vraagt de variabele uit deze cookie op met $_COOKIE["mijncookie"]

Een cookie verwijderen gebeurt ofwel automatisch, ofwel door een tijd in het verleden in te stellen:
setcookie("mijncookie","mijnwaarde",time()-1);

6.2. Sessies

Sessies zijn bedoeld om tijdens het bezoek (de sessie) informatie op te slaan die op meer pagina's gebruikt wordt.
Het sessiebestandje wordt op de server opgeslagen en bevat een unieke tekenreeks die de gebruiker identificeert. Deze sessionID wordt normaal opgeslagen in een cookie, maar als de browser dat niet toelaat zal PHP trachten de ID als variabele mee te sturen met een link of in een formulier.

Om met sessies te kunnen werken moet in php.ini een map opgegeven zijn die voor iedere gebruiker toegankelijk en aan te passen is.
Als dat nog niet het geval is, kan je bv. een map maken onder de PHP-map zelf.
De sessievariabelen worden dan onder de vorm van cookies opgeslagen in de opgegeven map.

Je start een sessie met het commando session_start();
Dat commando moet de allereerste regel zijn in elke pagina die de sessievariabelen aanspreekt.
Dan worden de sessievariabelen die je op één pagina maakte, automatisch doorgegeven aan alle andere pagina's.

Best zet je DOCTYPE net achter de eerste php-sluittag: ?><!DOCTYPE html>

Je maakt een sessievariabele met $_SESSION, bv: $_SESSION["naam"] = "Jansen";

Je verwijdert een sessievariabele met unset($_SESSION["naam"]);

Met session_destroy() zal je de volledige sessie resetten en worden alle opgeslagen data uit de sessie verwijderd.

6.3. Oefeningen

Oefening 1: cookies

  1. Maak een formulier met de tekst Hoe heet je, een invulveld en de knop Verzenden (naar zichzelf).
  2. Sla de opgegeven naam op in een cookie dat 30 dagen bewaard wordt.
  3. Als het cookie reeds bestaat, toon je niet het formulier maar Welkom en de naam.

Zolang je de browser niet sluit, is de naam gekend in het PHP-script.
Sluit je de browser en open je het formuliertje binnen 30 dagen, dan wordt de naam uit de cookie opgehaald en zie je dus Welkom [naam] en niet het formulier.

Als je manueel het cookie wist, zal na het heropenen van het bestandje het formulier opnieuw zichtbaar zijn.

Oefening 2: sessies

Oefening 3