Wat leer je deze week?

Vorige week kon je gebruikers laten inloggen met een loginformulier en sessions.

Deze week ga je pagina’s beschermen.

Niet iedereen mag zomaar overal bij kunnen.

Je leert hoe PHP controleert of een gebruiker ingelogd is en hoe je bezoekers doorstuurt als dat niet zo is.

Kernconcepten (in normale mensentaal)

Een beveiligde pagina werkt eigenlijk als een portier bij een concert 😭

De portier kijkt:

“Sta jij op de gastenlijst?”

Bij een webapp doet PHP eigenlijk hetzelfde.

PHP controleert:

  • bestaat er een session?
  • is de gebruiker ingelogd?
  • mag deze gebruiker deze pagina zien?

Als dat niet zo is:

  • wordt de gebruiker doorgestuurd naar login.php

Dus ongeveer zo:

gebruiker opent pagina
↓
PHP controleert session
↓
ingelogd?
↓
ja → pagina tonen
nee → redirect naar login

Belangrijk:

de controle gebeurt server-side in PHP.

Dus:

  • niet alleen een knop verbergen
  • niet alleen CSS gebruiken
  • PHP bepaalt uiteindelijk toegang

Wat moet je kennen?

1. session_start() gebruiken

Uitleg
Sessions werken alleen als je ze eerst start.

Wat moet je kennen

  • session_start()
  • sessions initialiseren
  • bovenaan pagina plaatsen

Voorbeeld

session_start();

Onthoud: session_start() moet bovenaan je bestand staan, vóór HTML output.

2. Loginstatus opslaan in een session

Uitleg
Na een succesvolle login sla je informatie op in $_SESSION.

Wat moet je kennen

  • $_SESSION
  • associative arrays
  • loginstatus onthouden

Voorbeeld

$_SESSION['user'] = $user['username'];

Onthoud: Sessions werken als tijdelijk geheugen voor PHP.

3. Controleren of een gebruiker ingelogd is

Uitleg
Met isset() controleer je of een session bestaat.

Wat moet je kennen

  • isset()
  • $_SESSION
  • if-statements

Voorbeeld

if (isset($_SESSION['user'])) {

    echo "Welkom!";

}

Onthoud: isset() controleert of een waarde bestaat.

4. Een pagina beveiligen

Uitleg
Als een gebruiker niet ingelogd is, stuur je die terug naar de loginpagina.

Wat moet je kennen

  • header()
  • exit
  • redirects
  • login checks

Voorbeeld

session_start();

if (!isset($_SESSION['user'])) {

    header('Location: login.php');
    exit;

}

Onthoud: De redirect stopt ongewenste toegang tot de pagina.

5. Uitloggen met session_destroy()

Uitleg
Bij uitloggen verwijder je de session van de gebruiker.

Wat moet je kennen

  • session_destroy()
  • redirects
  • sessions verwijderen

Voorbeeld

session_start();

session_destroy();

header('Location: login.php');
exit;

Onthoud: Uitloggen betekent dat de session verwijderd wordt.

6. Beschermde pagina’s herkennen

Uitleg
Niet elke pagina hoeft beveiligd te zijn.

Voorbeelden

PaginaBeveiligd?
login.phpNee
register.phpNee
dashboard.phpJa
admin.phpJa
edit.phpVaak wel

Onthoud: Pagina’s die data aanpassen zijn meestal beveiligd.

Veelgemaakte fouten (met voorbeelden)

1. session_start() vergeten

Dan werken sessions niet.

Fout

$_SESSION['user'] = 'Cass';

Beter

session_start();

$_SESSION['user'] = 'Cass';

2. HTML tonen vóór session_start()

Dan krijg je vaak errors.

Fout

<h1>Welkom</h1>

<?php
session_start();
?>

Beter

<?php
session_start();
?>

3. Alleen een knop verbergen

Een verborgen knop betekent niet dat een pagina beveiligd is.

Fout

<?php if($loggedIn): ?>
    <a href="admin.php">Admin</a>
<?php endif; ?>

zonder beveiliging in admin.php.

Beter

session_start();

if (!isset($_SESSION['user'])) {

    header('Location: login.php');
    exit;

}

4. exit vergeten na redirect

Dan kan PHP soms nog verder uitvoeren.

Fout

header('Location: login.php');

Beter

header('Location: login.php');
exit;

5. session_destroy() gebruiken zonder session_start()

Dan bestaat de session niet.

Fout

session_destroy();

Beter

session_start();

session_destroy();

Snippets

Session starten

session_start();

Loginstatus opslaan

$_SESSION['user'] = $user['username'];

Checken of gebruiker ingelogd is

if (isset($_SESSION['user'])) {

}

Pagina beveiligen

session_start();

if (!isset($_SESSION['user'])) {

    header('Location: login.php');
    exit;

}

Uitloggen

session_start();

session_destroy();

header('Location: login.php');
exit;

Video (coming soon)

Video komt eraan

Zodra de uitlegvideo beschikbaar is, wordt alleen de YouTube-ID vervangen.