We kunnen gegevens doorsturen tussen verschillende pagina's door gebruik te maken van de $_POST- en de $_GET-variabele. Het is echter behoorlijk omslachtig om bepaalde gegevens constant op deze manier door te sturen. Het zou handiger zijn mochten we een aantal gegevens kunnen opslaan in een variabele die altijd toegankelijk is gedurende het bezoek aan de website.
Hiervoor kunnen we gebruik maken van sessies.
Een andere mogelijkheid is, om bepaalde zaken te bewaren tussen de verschillende bezoeken van de website in. Denken we bijvoorbeeld aan de taalkeuze, de gebruikersnaam, ... Hiervoor kunnen we gebruik maken van cookies. Dit zijn kleine bestandjes die opgeslagen worden op de harde schijf van de gebruiker.
We lezen een gebruikersnaam in via een formulier. Deze naam moet op elke pagina die bezocht wordt, worden weergegeven. Ook wordt het aantal bezoeken bijgehouden gedurende deze sessie:
Op de pagina gebruikersnaam.html wordt de gebruikersnaam ingelezen:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Gebruikersnaam</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="gebruikersnaam1.php">
<label for="gebruikersnaam">Gebruikersnaam:</label>
<input type="text" name="gebruikersnaam" id="gebruikersnaam" />
<input type="submit" name="button" id="button" value="Verzenden" />
</form>
</body>
</html>
De gebruikersnaam wordt bewaard in een sessie:
<?php
session_start();
$gebruikersnaam = $_POST['gebruikersnaam'];
$_SESSION ['gebruikersnaam'] = $gebruikersnaam;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Gebruikersnaam opslaan</title>
</head>
<body>
<p>Welkom <?php print $gebruikersnaam; ?></p>
<p><a href="gebruikersnaam2.php">Naar de volgende pagina</a></p>
</body>
</html>
Het aantal bezoeken wordt telkens verhoogd:
<?php
session_start();
$gebruikersnaam = $_SESSION['gebruikersnaam'];
$bezoeken = ++$_SESSION['bezoeken'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Gebruikersnaam opvragen en bezoeken tellen</title>
</head>
<body>
<p><?php print $gebruikersnaam; ?> bezocht deze pagina al <?php print $bezoeken; ?> keer.</p>
<p><a href="gebruikersnaam2.php">Deze pagina nog een keer bezoeken.</a></p>
</body>
</html>
Weergeven
Sessies maken gebruik van twee gegevens:
De variabelen zelf worden bewaard op de server en niet op de computer van de gebruiker. Op die manier is er geen misbruik van de gegevens mogelijk en blijf je onafhankelijk van de browser van de gebruiker. Een sessie loopt, zolang de gebruiker met zijn browser een bepaalde website bezoekt. Keert de gebruiker nadien, zonder de browser af te sluiten en binnen een bepaalde tijd, terug naar deze website, wordt de sessie verder gezet. Sluit de gebruiker de browser af, dan wordt ook de sessie afgesloten. Bij sommige browsers is dit echter niet het geval, en blijft een sessie bestaan, zolang de sessietijd niet overschreden werd, onafhankelijk van het sluiten van de browser of niet.
De variabelen zelf worden wel nog een tijdje op de server bewaard, omdat de server niet kan weten dat de gebruiker zijn browser heeft afgesloten. Deze tijd wordt bepaald in het php.ini-bestand door de session.gc_maxlifetime-instelling. Deze staat standaard op 1440 seconden of 24 minuten. Dit betekent dat er, om een sessie in stand te houden, niet meer dan 24 minuten inactiviteit mag zijn.
Er bestaat echter wel een mogelijkheid om deze sessie toch expliciet te stoppen en daarmee alle variabelen op de server te wissen.
De gegevens worden op de server geïdentificeerd door de sessie-ID. Deze ID wordt telkens doorgegeven aan de server, als de bezoeker gebruik maakt van sessies. Als de ID nog niet bestaat, wordt deze aangemaakt als een uniek nummer. Omdat de ID telkens moet doorgegeven worden aan de server bij het versturen van gegevens wordt deze ID opgeslagen op de computer in de vorm van een cookie.
Het enige wat dus over gestuurd wordt is de sessie-ID. De gegevens worden enkel op de server bewaard en de ID is als het ware de sleutel tot deze gegevens.
Hou er dus wel rekening mee, dat als je gebruik wilt maken van sessies, dat de gebruiker cookies moet toestaan.
Het werken met sessies is behoorlijk eenvoudig. PHP bevat namelijk een uitgebreide verwerking van sessies. Het werken zal voornamelijk uit 3 stappen bestaan:
Het opstarten gebeurt door eenvoudig de functie session_start() op te roepen.
Bij het opstarten van deze sessie, wordt er eerst gecontroleerd of er al een sessie voor deze gebruiker bestaat. Daarvoor wordt er gekeken of er een cookie op de pc van de bezoeker staat die aan de juiste omschrijving voldoet (correcte session-id). Indien dit niet zo is, wordt er op de server ruimte voorzien voor het opslaan van de gebruikte sessie-variabelen en wordt er een cookie gestuurd naar de browser met daarin de waarde van de sessie-ID. Deze ID is een nummer bestaande uit 32 hexadecimale cijfers, vb: 6bf5ejk2lmviflr41e5dtiquv1.
Als er wel al een sessie loopt, wordt er geen nieuwe opgestart, maar wordt de cookie uitgelezen. Aan de hand van deze cookie weet de server welke variabelen hij moet gebruiken in het script.
Doordat de session_start() iets terugstuurt naar de browser in de HTTP-headers, moet session_start() opgeroepen worden vóór er iets van output naar de browser gestuurd wordt.
Doe je dit niet dan zal je script niet werken.
De ID van de huidige sessie kun je terugvinden door de functie session_id() op te roepen.
Nadat je de session_start() opgeroepen hebt, kun je gebruik maken van de variabele $_SESSION[]. Deze array-variabele kan gebruikt worden om elk type gegevens in op te slaan, inclusief andere arrays.
Vergeet je de functie session_start() op te roepen in het begin van je script dan gaan de eventuele wijzigingen in de $_SESSION[]-variabele verloren zodra het script eindigt.
In sommige omstandigheden wil je alle of slechts een aantal sessievariabelen verwijderen. Denk bijvoorbeeld aan foutafhandelingen in een formulier, of het afmelden bij een bepaalde pagina.
Om één sessievariabele te verwijderen tijdens de uitvoer van een script, kun je gebruik maken van de standaardfunctie unset(). Deze functie zorgt ervoor dat de opgeroepen variabele verwijderd wordt:
Vergeet vooral niet om op te geven welke waarde je wilt verwijderen uit je $_SESSION[]-variabele. Geef je deze niet op, dan wordt je volledige $_SESSION-variabele verwijderd.
We zouden ook unset($_SESSION) kunnen gebruiken om een volledige sessie te beëindigen. Meestal wordt hiervoor de functie session_destroy() gebruikt, omdat de volledige $_SESSION[] verwijdert wordt. Deze session_destroy() wordt meestal gebruikt bij afmeld-pagina's.
<?php
session_start();
session_destroy();
header("location: login.php");
?>
Vergeet niet om de session_destroy te laten voorafgaan door een session_start()!