banner

3.2: Cookies in PHP

Wat is een cookie ?

Een cookie wordt vaak gebruikt om een gebruiker te identificeren. Het is een (text)bestand op jouw computer, afkomstig van een website. Een cookie bevat informatie over die website (dit kan van alles zijn).
Nadat je een website hebt bezocht, en je je browser hebt afgesloten, 'weet' je browser niet meer dat jij deze website hebt bezocht, of wat je er hebt gedaan. Alle informatie van je bezoek is (aan jouw kant) dus weg. Om informatie van / over de website bij te houden, kan een website een cookie creƫren op de machine die de site bezoekt. Met PHP, kan je zowel cookies aanmaken en veranderen.

Hoe ziet een cookies er uit?

Een cookie bestaat uit de volgende onderdelen:
  • een naam (name)
  • een waarde (value)
  • een verloopdatum (expire)
Er zijn meer parameters mogelijk maar die vallen buiten het bestek van deze cursus.

De naam wordt gebruikt om een cookie te kunnen identificeren. Elke naam moet uniek zijn. Dit veld is het enige verplichte veld van een cookie.

Wat kun je met een cookie?

  • informatie over de laatst bezochte pagina of het vorige bezoek aan de site
  • informatie over een poll waar iemand op gestemd heeft
  • informatie over de voorkeur van een gebruiker voor een bepaalde stylesheet
  • informatie over de voorkeur voor een gebruikte taal op de website
  • informatie over de laatst verrichte zoekactie (bijvoorbeeld de zoektermen)
De cookies van je eigen website kun je in PHP benaderen via $_COOKIE. $_COOKIE bevat alle geldige en niet verlopen cookies van die site.

Hoe maak ik Cookies aan?

Je kan een Cookie aanmaken met behulp van setcookie(). Op elke pagina waar je cookies wilt gebruiken zet je dus setcookie(). Je moet er voor zorgen dat setcookie() bovenaan in je pagina staat, dus nog voordat je iets anders met je pagina doet. Zet in dit geval dus setcookie() helemaal bovenin je PHP-pagina, nog vóór je <head> of <!DOCTYPE ...> tags, anders zal je pagina errors genereren.

In de setcookie() fuctie geef je verschillende variabelen mee. De belangrijkste zijn de genoemde naam, waarde en de verloopdatum. De verloopdatum geeft aan voor hoelang het cookiebestand blijft bestaan. In het voorbeeld is gekozen voor 30 dagen (3600s x 24u x 30d). De time() functie in php wordt gebruikt om de huidige tijd op te vragen.

<?php
$cookie_naam= "beleg";
$cookie_waarde = "Pindakaas";
$cookie_verlooptijd = time() + 86400 * 30;
setcookie($cookie_naam, $cookie_waarde, $cookie_verlooptijd);

?>
<!DOCTYPE ...>

Let op:
Je kunt de inhoud/waarde van een cookie ook veranderen door het de waarde van een variabele te geven. Bijvoorbeeld:
$cookie_waarde = $_POST['username'];


Hoe lees ik cookie-variabelen uit ?

Cookies worden uitgelezen door $_COOKIE['....']. De isset() functie kan gebruikt worden om te controleren of de cookie bestaat. Dit lijkt dus op wat je hebt geleerd bij de vorige paragrafen: $_SESSION['....'] en $_POST['....']

<?php
if(!isset( $_COOKIE[$cookie_naam]))
{
echo 'Cookie genaamd '.$cookie_naam. ' bestaat niet!';
}
else
{
echo 'Cookie '.$cookie_naam. ' bestaat!';
echo 'De inhoud is: '. $_COOKIE[$cookie_naam];
}?>

Belangrijk:
Met $_COOKIE[$cookie_naam] lees je de INHOUD/WAARDE uit van de cookie.

Hoe verander ik cookie-variabelen ?

Om de waarden van een cookie te veranderen gebruik je opnieuw de setcookie() functie. In het voorbeeld wordt de waarde van de Cookie van Pindakaas veranderd naar Hagelslag.

<?php
$cookie_naam= "beleg";
$cookie_waarde = "Hagelslag";
$cookie_verlooptijd = time() + 86400 * 30;
setcookie($cookie_naam, $cookie_waarde, $cookie_verlooptijd);

?>
<!DOCTYPE ...>

Hoe verwijder ik cookie-variabelen ?

Om een cookie te verwijderen gebruiken we opnieuw de setcookie() functie met een verlooptijd in het verleden.

<?php
$cookie_naam= "beleg";
setcookie($cookie_naam, '', time() - 3600);

?>
<!DOCTYPE ...>
OPDRACHT 10

Maak 3 bestanden:
  • één index.html pagina waar een bezoeker een gebruikersnaam en wachtwoord in moet voeren.
  • één verwerken.php pagina die controleert of de bezoeker een juiste combinatie van gebruikersnaam en wachtwoord ingevuld heeft. Als dat het geval is dan wordt er een cookie opgeslagen met daarin de inloggegevens.
  • één verwijderen.php pagina die de cookie verwijdert wanneer er op een knop op de indexpagina wordt gedrukt.
Wanneer de bezoeker een volgende keer de pagina bezoekt moet de gebruikersnaam worden onthouden.

N.B. Bedenk goed waar je de cookie variabelen aanmaakt.