HTTP is stateless, als we een pagina opvragen en we vragen een minuut later een andere pagina op weet de server niet dat beide aanvragen van dezelfde gebruiker komen. Om dit probleem op te lossen zijn er cookies, cookies zijn kleine tekstbestanden die worden opgeslaan op je computer en met iedere request worden meegestuurd in de headers.
9.1 Cookies
We kunnen in PHP cookies instellen met de functie setcookie():
PHP-code:
<?php
setcookie('naam', 'waarde'); // Methode 1
setcookie('naam', 'waarde', 0); // Methode 2
?>
Cookies worden gebruikt om te weten dat een gebruiker ingelogd is maar hoe onthouden we dan bijvoorbeeld 1h lang ondanks de dat de browser gesloten wordt?
Dit kan door een extra parameter mee te geven waarbij we de huidige tijd + het aantal seconden dat we willen dat het cookie blijft bestaan invullen.
PHP-code:
<?php
setcookie('naamCookie', 'waarde van cookie', time()+3600);
?>
PHP-code:
<?php
setcookie('naam', '', time()); // D.m.v. de huidige tijd
setcookie('naamCookie', '', time()-3600); // 1h terug in de tijd.
?>
9.2 Sessions
PHP heeft een eigen implementatie om het probleem van stateless HTTP op te lossen, namelijk sessions. Als we een session starten wordt op de computer van de gebruiker een cookie geplaats met een unieke code. Als de gebruiker daarna terug naar de site komt, herkent PHP zelf dit cookie, zoekt de sessie op en plaatst de juiste gegevens in de superglobal $_SESSION, deze superglobal is dus uniek voor iedere sessie en dus voor iedere gebruiker.
Je kan een sessie starten met session_start(), deze functie plaatst automatisch het cookie, omdat het setten van een cookie gebeurt in de headers moet deze functie aangeroepen worden VOOR de gewone output naar de gebruiker wordt gestuurd.
Nadat de sessie gestart is met session_start() kunnen we gegevens in de superglobal $_SESSION plaatsen, als de gebruiker nu later terugkomt zal PHP de juiste gegevens (die we eerder in de superglobal geplaatst hebben) terugplaatsen. We hoeven zo zelf geen rekening te houden met de state van de verbinding.
PHP-code:
<?php
session_start();
$_SESSION['bezoek'] += 1;
echo 'Je hebt deze pagina al' . $_SESSION['bezoek'] . ' keer bezocht';
?>
Geschreven door: Martijn Croonen.
Aanpassingen door: Aerts Kurt.