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
- De browser vraagt een pagina op
- PHP start of hervat een sessie
- De server koppelt gegevens aan een sessie-ID
- 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