Uitleg sessies

Werken met sessies in PHP

Websites werken anders dan gewone programma’s. Elke keer dat je een pagina opent, stuurt de browser een nieuw verzoek (request) naar de server.

De server onthoudt normaal niets van vorige pagina’s.

Bijvoorbeeld:

  1. Je opent een pagina
  2. Je klikt op een knop
  3. De pagina wordt opnieuw geladen

Voor de server zijn dit drie losse bezoeken.

Soms wil je dat een website informatie onthoudt, bijvoorbeeld:

  • een ingelogde gebruiker
  • een winkelwagen
  • een spelstand

Daarvoor gebruiken we sessies.

Wat is een sessie?

Een sessie is een plek op de server waar je gegevens van een gebruiker tijdelijk kunt opslaan.

Elke bezoeker krijgt een unieke sessie-id. De browser bewaart deze id in een cookie.

Daarmee kan de server herkennen:

"Dit is dezelfde gebruiker als daarnet."


Een sessie starten

Voordat je een sessie kunt gebruiken, moet je deze starten.

session_start();

Dit moet bovenaan het PHP-bestand staan, voordat er HTML wordt getoond.

Bijvoorbeeld:

<?php
session_start();
?>
<h1>Mijn pagina</h1>

Gegevens opslaan in een sessie

Sessies werken met de variabele:

$_SESSION

Dit is een array.

Je kunt er gegevens in opslaan:

$_SESSION['naam'] = 'Jan';

Nu onthoudt de server deze waarde.


Gegevens uit een sessie lezen

Je kunt de opgeslagen waarde weer gebruiken:

echo $_SESSION['naam'];

Uitvoer:

Jan

Controleren of iets in de sessie staat

Soms wil je eerst controleren of een waarde bestaat.

Dat kan met isset().

if (isset($_SESSION['naam'])) {
    echo "Naam gevonden";
}

Een complete sessie variabele opslaan

Je kunt ook een array opslaan in een sessie.

Dat gaan we gebruiken voor het spel.

$_SESSION['spel'] = [
    'start' => [
        'blauw' => 0,
        'geel' => 10,
        'groen' => 20,
        'rood' => 30
    ],
    'stappen' => [
        'blauw' => 0,
        'geel' => 0,
        'groen' => 0,
        'rood' => 0
    ]
];

Nu staat de hele spelstand in de sessie.


Sessiedata bekijken (debuggen)

Tijdens het programmeren is het handig om de sessie te bekijken.

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

<pre> zorgt ervoor dat de structuur netjes zichtbaar wordt.


Een sessie verwijderen

Soms wil je de sessie leegmaken.

$_SESSION = [];
session_destroy();

Dit stopt de sessie en verwijdert alle opgeslagen gegevens.


Waarom gebruiken we sessies in dit project?

In dit project maken we een Mens erger je niet spel.

De sessie onthoudt bijvoorbeeld:

  • de startposities
  • de stappen van elke pion
  • meldingen van het spel

Zo blijft de spelstand bewaard terwijl de pagina opnieuw wordt geladen.


Samenvatting

Belangrijke stappen bij sessies:

  1. Start de sessie
session_start();
  1. Sla gegevens op
$_SESSION['spel'] = $spel;
  1. Lees gegevens
$spel = $_SESSION['spel'];
  1. Stop de sessie
session_destroy();

Week 2 Overzicht