PHP sessies zijn een manier om informatie op te slaan in variabelen die gebruikt kunnen worden in meerdere PHP pagina's. Als voorbeeld nemen we een aanmeldpagina. Op de aanmeldagina word de gebruikersnaam en wachtwoord gecontroleerd en indien juist opgeslagen in sessievariablen. Nu kunnen we deze sessie variablen gebruiken in bijvoorbeeld de index pagina om te controleren of iemand is aangemeld. In tegenstelling tot een cookie wordt de informatie niet opgeslagen op de computer van de gebruiker, maar op de server. PHP sessies zijn dus handig voor het bijhouden van de identiteit en de voorkeuren van de gebruiker, bijvoorbeeld bij het inloggen of het winkelen.
Om een PHP sessie te starten, moet je de functie session_start ()
aanroepen aan het begin van elk PHP-script dat sessievariabelen wil gebruiken of lezen. Sessievariabelen worden ingesteld met de PHP globale variabele $_SESSION
, die een associatieve array is. Bijvoorbeeld:
<?php
// Start de sessie
session_start ();
// Stel sessievariabelen in
$_SESSION["gebruikersnaam"] = "Jan";
$_SESSION["wachtwoord"] = "geheim";
?>
Om de waarde van een sessievariabele te lezen, gebruik je dezelfde $_SESSION array. Dit kan ook op een ander pagina. Bijvoorbeeld:
<?php
// Start de sessie
session_start ();
// Lees sessievariabelen
echo "Hallo " . $_SESSION["gebruikersnaam"] . "!<br>";
echo "Je wachtwoord is " . $_SESSION["wachtwoord"] . ".";
?>
Om een sessievariabele te wijzigen, overschrijf je hem gewoon met een nieuwe waarde. Bijvoorbeeld:
<?php
// Start de sessie
session_start ();
// Wijzig sessievariabelen
$_SESSION["wachtwoord"] = "nieuwgeheim";
?>
Om een sessievariabele te verwijderen, gebruik je de functie unset () of de functie session_unset (). Om een hele sessie te beƫindigen, gebruik je de functie session_destroy (). Bijvoorbeeld:
<?php
// Start de sessie
session_start ();
// Verwijder individuele sessievariabelen
unset ($_SESSION["wachtwoord"]);
// Verwijder alle sessievariabelen
session_unset ();
// Vernietig de sessie
session_destroy ();
?>
PHP sessies kunnen gecombineerd worden met MySQL om gegevens op te slaan of op te halen uit een database. Dit kan handig zijn voor het maken van dynamische webapplicaties die afhankelijk zijn van gebruikersinvoer of -interactie. Bijvoorbeeld, stel dat je een database voor leerlingen hebt waar leerlingen hun gegevens kunnen aanpassen. Je kunt dan een tabel maken in MySQL die de leerlinggegevens. Vervolgens kun je een PHP-script schrijven dat alle gegevens uit een formulier haalt en het leerlingnummer uit een sessievariabele haalt. Het leerlingnummer is na het aanmelden van de leerling in een sessievariable opgeslagen. Op deze mannier kan de leerling nooit gegevens van iemand anders aanpassen. Bijvoorbeeld:
<?php
// Start de sessie
session_start ();
$servername = "localhost"; // de servernaam, in ons geval localhost
$username = "root"; // de gebruikersnaam voor de database
$password = ""; // het wachtwoord, XAMPP heeft standaard geen wachtwoord, vandaar dat deze lee
$database = "administratie"; // de naam van de database
try {
$conn = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
// data toevoegen met gegevens uit een formulier en sessie
$sql="INSERT INTO leerlingen (leerling_nummer, leerling_voornaam, leerling_tussenvoegsels, leerling_achternaam, leerling_geboortedatum, leerling_stamgroep) VALUES (:leerlingnummer, :leerlingvoornaam, :leerlingtussenvoegsel, :leerlingachternaam, :leerlinggeboortedatum, :leerlingstamgroep);";
$params = [
":leerlingnummer"=> $_SESSION["Leerling_nummer"],
":leerlingvoornaam"=> $_POST["firstname"],
":leerlingtussenvoegsel"=> $_POST["prefix"],
":leerlingachternaam"=> $_POST["lastname"],
":leerlinggeboortedatum"=> $_POST["dob"],
":leerlingstamgroep"=> $_POST["group"]
];
$stmt = $conn->prepare($sql);
$stmt->execute($params);
$newPrimaryKey = $conn->lastInsertId(); // het insert id kun je bijv. gebruiken in een andere tabel met extra gegevens.
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>