Hoofdstuk 17: Sessions

← Terug naar overzicht

Wat zijn sessions?

In het vorige hoofdstuk leerde je dat HTTP stateless is en dat cookies data opslaan in de browser. Sessions werken anders: de data wordt op de server bewaard. De browser ontvangt alleen een uniek session-ID (via een cookie genaamd PHPSESSID). Dit is veiliger omdat de gebruiker de data niet kan aanpassen.

Elke sessie begint met session_start(). Dit moet je aanroepen bovenaan elke pagina die sessions gebruikt, vóór enige HTML-output.

<?php
session_start();
$_SESSION['gebruiker'] = "Jan";
echo "Sessie gestart voor: " . $_SESSION['gebruiker'];
?>

Belangrijk: session_start() MOET aangeroepen worden voordat er output naar de browser wordt gestuurd, net als bij setcookie(). Roep het aan als allereerste regel in je PHP-bestand.

Let op: In de oefeningen hieronder hoef je GEEN <?php en ?> tags te typen. Het platform regelt dit automatisch. Je typt alleen de PHP-code zelf.

Oefening 1

Start een sessie met session_start() en sla de waarde "nl" op in $_SESSION['taal']. Toon daarna de waarde met echo.

Jouw code:

Oefening 2

Start een sessie en sla de naam "Pieter" op in $_SESSION['naam'] en de rol "student" in $_SESSION['rol']. Toon "Naam: Pieter, Rol: student".

Jouw code:

Oefening 3

Start een sessie. Controleer met isset() of $_SESSION['gebruiker'] bestaat. Zo ja, toon de waarde. Zo nee, toon "Niet ingelogd". (Ga ervan uit dat de sessie leeg is.)

Jouw code:

Oefening 4

Start een sessie en sla "admin" op in $_SESSION['rol']. Controleer of de rol "admin" is. Zo ja, toon "Toegang verleend". Zo nee, toon "Toegang geweigerd".

Jouw code:

Session data bijwerken en verwijderen

Je kunt sessiewaarden overschrijven door er een nieuwe waarde aan toe te wijzen. Om een enkele sessievariabele te verwijderen gebruik je unset(). Om de hele sessie te vernietigen gebruik je session_destroy().

<?php
session_start();

// Waarde bijwerken
$_SESSION['paginaweergaven'] = 1;
$_SESSION['paginaweergaven'] = $_SESSION['paginaweergaven'] + 1;

// Eén variabele verwijderen
unset($_SESSION['tijdelijk']);

// Hele sessie vernietigen (bij uitloggen)
session_destroy();
?>

Na session_destroy() bestaat $_SESSION nog in het huidige script, maar bij het volgende verzoek is alles weg. Gebruik dit voor uitlogfunctionaliteit.

Oefening 1

Start een sessie. Stel $_SESSION['teller'] in op 0. Verhoog de teller drie keer met += 1. Toon de eindwaarde.

Jouw code:

Oefening 2

Start een sessie. Sla "Jan" op in $_SESSION['naam'] en "donker" in $_SESSION['thema']. Verwijder daarna $_SESSION['thema'] met unset(). Controleer met isset() of $_SESSION['thema'] nog bestaat en toon "Thema verwijderd" als dat niet zo is.

Jouw code:

Oefening 3

Schrijf een functie login($naam, $rol) die een sessie start en de naam en rol opslaat in $_SESSION. Schrijf een functie logout() die de sessie vernietigt met session_destroy(). Roep login("Eva", "docent") aan, toon "Ingelogd als Eva", en roep daarna logout() aan.

Jouw code:

Oefening 4

Start een sessie. Maak een array $winkelwagen in $_SESSION (als die nog niet bestaat, maak een lege array). Voeg "Appel", "Brood" en "Kaas" toe aan de winkelwagen met []. Toon het aantal producten met count().

Jouw code:

Sessions vs. Cookies

Het verschil tussen sessions en cookies is cruciaal om te begrijpen:

| | Sessions | Cookies |

|---|---|---|

| Opslag | Server | Browser |

| Veiligheid | Veiliger (data niet zichtbaar) | Minder veilig (gebruiker kan aanpassen) |

| Levensduur | Tot browser sluit of session_destroy() | Tot verlooptijd |

| Grootte | Geen praktische limiet | Max ~4KB per cookie |

Gebruik sessions voor gevoelige data (login, winkelwagen) en cookies voor voorkeuren (thema, taal).

Oefening 1

Schrijf een functie isIngelogd() die controleert of $_SESSION['gebruiker'] bestaat. Return true of false. Start een sessie, sla "admin" op in $_SESSION['gebruiker'], en toon "Ingelogd: true" met behulp van var_export() om de boolean als tekst te tonen.

Jouw code:

Oefening 2

Bouw een compleet sessiesysteem. Start een sessie. Schrijf een functie login($naam) die de naam opslaat in $_SESSION['naam'] en de huidige tijd (date("H:i")) in $_SESSION['login_tijd']. Schrijf een functie welkom() die "Welkom [naam], ingelogd om [tijd]" teruggeeft als de gebruiker is ingelogd, of "Niet ingelogd" als dat niet zo is. Roep login("Sophie") aan en toon het resultaat van welkom().

Jouw code:

Samenvatting