PHP Sessies

Hoe onthoudt een website informatie?

flowchart TD Client["👤 Client"] --> Server["🖥️ Server"]
flowchart TD Client["👤 Client"] -->|Request mijn-in.nl/login.php| Server["🖥️ Server"] linkStyle 0 color:#ef4444,stroke:#475569

Server runt login.php

<?php
$user = 'admin';

echo "Welkom " . $user;
flowchart TD Server["🖥️ Server"] -->|Antwoord van server in html| Client["👤 Client"] linkStyle 0 color:#ef4444,stroke:#475569

Client krijgt een response

Welkom admin
flowchart TD Client["👤 Client"] -->|Request mijn-in.nl/index.php| Server["🖥️ Server"] linkStyle 0 color:#ef4444,stroke:#475569

Server runt index.php

<?php
echo "Welkom " . $user;
flowchart TD Server["🖥️ Server"] -->|Antwoord van server in html| Client["👤 Client"] linkStyle 0 color:#ef4444,stroke:#475569

Client krijgt een response

Welkom {error}

Probleem: HTTP vergeet alles

  • Elke pagina is een nieuwe request
  • De server onthoudt gewone variabelen niet
  • Na een refresh begint PHP opnieuw

Zonder sessies

  • Een gebruiker logt in
  • Daarna opent die gebruiker een nieuwe pagina
  • De website weet niet vanzelf meer wie het is

Probleem: er is geen geheugen tussen pagina’s

Oplossing: sessies

  • De server bewaart gegevens tijdelijk
  • Elke bezoeker krijgt een unieke sessie-ID
  • Met die ID kan de server de juiste gegevens terugvinden

Het idee in stappen

  1. De browser vraagt een pagina op
  2. PHP start of hervat een sessie
  3. De server koppelt gegevens aan een sessie-ID
  4. De browser stuurt die ID bij volgende requests weer mee

Visueel overzicht

flowchart TD A["🌐 Browser opent pagina"] --> B["🐘 PHP start sessie"] B --> C["🖥️ Server maakt of leest sessie-ID"] C --> D["💾 Gegevens staan op server"] D --> E["🌐 Browser stuurt sessie-ID later opnieuw mee"]

Een sessie starten

session_start();
  • Deze regel staat bovenaan je PHP-bestand
  • Hiermee start je een nieuwe sessie of laad je een bestaande sessie

Let op: plaats geen output vóór session_start()

Gegevens opslaan

<?php
session_start();

$_SESSION['user'] = 'Jan';
  • $_SESSION is een speciale associatieve array
  • Links staat de key
  • Rechts staat de value

Gegevens ophalen

<?php
session_start();

echo $_SESSION['user'];
  • Dit werkt alleen als de sessie eerst gestart is
  • De key moet exact dezelfde naam hebben

Handig bij debuggen

<?php
session_start();

echo '<pre>';
print_r($_SESSION);
echo '</pre>';
  • Zo kun je zien wat er in de sessie zit
  • Vooral handig als iets niet wordt opgeslagen zoals je verwacht

Sessies lijken op arrays

  • $_SESSION['naam']
  • $_SESSION['rol']
  • $_SESSION['score']

Je gebruikt dus dezelfde logica als bij andere associatieve arrays. Meer daarover volgende les.

Voorbeeld in een website

Een gebruiker logt in:

session_start();

$_SESSION['ingelogd'] = true;
$_SESSION['gebruiker'] = 'Lisa';

Op een volgende pagina kun je dan controleren:

session_start();

if ($_SESSION['ingelogd'] === true) {
    echo 'Welkom ' . $_SESSION['gebruiker'];
}

Sessies verwijderen

session_destroy();
  • Hiermee verwijder je de sessie
  • Dit gebruik je meestal bij uitloggen

^ In de praktijk zie je vaak ook dat specifieke sessiewaarden eerst worden leeggemaakt.

Veelgemaakte fouten

  • session_start() vergeten
  • Output vóór session_start()
  • Een verkeerde key gebruiken
  • Denken dat sessiegegevens in de browser zelf staan
  • Vergeten te controleren of een key bestaat

Controleer eerst of iets bestaat

if (isset($_SESSION['naam'])) {
    echo $_SESSION['naam'];
}
  • Met isset() voorkom je foutmeldingen
  • Dit is veiliger dan direct een waarde tonen

Koppeling met jullie project

Bij Mens Erger Je Niet kun je sessies gebruiken om:

  • de naam van de speler te onthouden
  • de huidige beurt te bewaren
  • posities tijdelijk op te slaan
  • gegevens tussen pagina’s vast te houden

Samenvatting

  • HTTP vergeet standaard alles
  • PHP-sessies geven een website tijdelijk geheugen
  • $_SESSION is een associatieve array
  • Start altijd eerst met session_start()
  • Gebruik isset() om veilig te controleren
Reload?