Sessies nader bekeken: een eerste loginscript

In het vorige hoofdstuk hebben we een uitleg van het gebruik van superglobals in PHP gezien. Ook hebben we daar kennis gemaakt met de $_SESSION superglobal waarmee we variabele op meerdere paginas beschikbaar konden maken.

We zullen nu kijken naar hoe we deze manier kunnen toepassen in een zeer eenvoudig loginscript. Het script dat we schrijven is een loginscript voor 1 gebruiker met wachtwoord en zal gebruik maken van sessies.

De HTML code
Laten we maar weer beginnen met de HTML code van het loginformulier. We hebben nu twee inputvelden nodig waarin we een gebruikersnaam en wachtwoord in kunnen vullen. De typen die we voor deze velden gebruiken zijn respectievelijk 'text' en 'password'.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!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>Mijn eerste loginscript!</title>
</head>

<body>
<h1>Inloggen</h1>
<form method="post" action="login.php">
    <p>
        <label for="user">Gebruikersnaam:</label>
        <input type="text" name="user" id="users" />
    </p>
    <p>
        <label for="pass">Wachtwoord:</label>
        <input type="password" name="pass" id="pass" />
    </p>
    <p>
        <input type="submit" value="Inloggen" />
    </p>
</form>
</body>
</html>

Deze code spreekt redelijk voor zich. De action van het formulier laten we verwijzen naar login.php, het script waarmee we het login formulier verwerken.

Hier kun je een werkend voorbeeld van het loginscript vinden.

Het PHP script
Ook nu zal ik eerst weer het hele script laten zien, waarna ik het stap voor stap met je zal doornemen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
include '../../inc/stats.php';
// We gaan sessies gebruiken
session_start();

// Gebruikersnaam en wachtwoord instellen
$sGebruikerControle = 'admin';
$sWachtwoordControle = 'voorbeeld';

// Controle of het formulier verzonden is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // Controle of benodigde velden wel ingevuld zijn
    if(isset($_POST['user'], $_POST['pass']))
    {
    
        // Overbodige spaties verwijderen
        $sGebruiker = trim($_POST['user']);
        $sWachtwoord = trim($_POST['pass']);
        
        // Gebruikersnaam en wachtwoord controleren
        if($sGebruiker == $sGebruikerControle && $sWachtwoord == $sWachtwoordControle)
        {

            // Juiste gebruikersnaam en wachtwoord: inloggen!
            $_SESSION['logged_in'] = true;
            $_SESSION['gebruiker'] = $sGebruiker;
            
            // Doorsturen en melding geven
            header('Refresh: 3; url=beveiligd.php');
            echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.';
        }

        else
        {
            // Terugsturen en foutmelding geven
            header('Refresh: 3; url=login_form.php');
            echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!';
        }
    }

    else
    {
        header('Refresh: 3; url=login_form.php');
        echo 'Een vereist veld bestaat niet!';
    }
}

else
{
    // Terug naar het formulier
    header('Location: login_form.php');
    exit();
}

?>

Zoals je ziet lijkt het redelijk veel op de afhandeling van een formulier die we eerder al toegepast hebben. In dit script zitten echter wel een aantal andere dingen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
// We gaan sessies gebruiken
session_start();

// Gebruikersnaam en wachtwoord instellen
$sGebruikerControle = 'admin';
$sWachtwoordControle = 'voorbeeld';
?>

We maken bij dit loginscript gebruik van sessievariabelen, dus moeten we de pagina met session_start() beginnen. Vervolgens declareren we twee variabelen die respectievelijk de gebruikersnaam en het wachtwoord bevatten, deze zullen we later voor de controle gebruiken.

In geavanceerdere loginscripts haal je de gebruikersnaam en wachtwoord voor controle vaak uit een database. Maar aangezien database verbindingen geen onderdeel van deze tutorial zijn, zal ik dat hier niet behandelen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Controle of het formulier verzonden is
if($_SERVER['REQUEST_METHOD'] == 'POST')
?>

Ook hier controleren we eerst of er wel een formulier gepost is. We kunnen immers alleen met $_POST variabelen werken als ze ook daadwerkelijk gevuld en dus verzonden zijn.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Controle of benodigde velden wel ingevuld zijn
if(isset($_POST['user'], $_POST['pass']))
?>

De controle of de benodigde velden wel in de $_POST array aanwezig zijn, kan hier natuurlijk ook niet ontbreken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// Overbodige spaties verwijderen
$sGebruiker = trim($_POST['user']);
$sWachtwoord = trim($_POST['pass']);
?>

Vervolgens gebruiken we trim() om de loze spaties voor of achter een input te verwijderen. Dit voorkomt dat de gebruikersnaam en wachtwoord niet overeen zouden komen door zo'n spatie.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if($sGebruiker == $sGebruikerControle && $sWachtwoord == $sWachtwoordControle)
{

    // Juiste gebruikersnaam en wachtwoord: inloggen!
    $_SESSION['logged_in'] = true;
    $_SESSION['gebruiker'] = $sGebruiker;
    
    // Doorsturen en melding geven
    header('Refresh: 3; url=beveiligd.php');
    echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.';
}

?>

Dit is het gedeelte waar het eigenlijk om draait. Allereerst controleren we of de ingevulde gebruikersnaam en wachtwoord overeenkomen met de ingestelde waarden. Als dat het geval is, declareren we een tweetal sessievariabelen. $_SESSION['logged_in'] is een boolean die aangeeft of een gebruiker ingelogd is, $_SESSION['gebruiker'] krijgt de gebruikersnaam van de ingelogde gebruiker.

Opmerking: wachtwoorden sla je nooit op in een sessievariabele of cookie. Dit is nergens voor nodig en bovendien onveilig aangezien ook sessies gestolen kunnen worden. Een wachtwoord heb je maar eenmalig nodig, en dat is bij de controle van het login formulier.

Tenslotte geven we een melding dat de gebruiker ingelogd is en sturen we de gebruiker door naar de volgende pagina.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
else
{
    // Terugsturen en foutmelding geven
    header('Refresh: 3; url=login_form.php');
    echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!';
}

?>

Als de gebruikersnamen en/of het wachtwoord niet overeenkomen, geven we daar een melding van en sturen we de gebruiker terug naar het login formulier.

De beveiligde pagina
Tot nu toe hebben we gezien hoe we het login formulier in HTML weergeven en hoe de verwerking van het login formulier eruit ziet. Dan kunnen we nu kijken naar de beveiligde paginas die alleen toegankelijk zijn voor ingelogde gebruikers.

Op deze beveiligde paginas controleren we helemaal aan het begin met een if-statement of de bezoeker wel ingelogd is. Als dat niet het geval is, sturen we hem direct door naar het login formulier en stoppen we de rest van de uitvoer van het script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// We werken ook hier met sessies
session_start();

// Controleren of de bezoeker ingelogd is
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == false)
{

    header('Location: login_form.php');
    exit();
}


// Een welkomst tekst weergeven
echo 'Welkom '.$_SESSION['gebruiker'].' wat leuk dat je er weer bent.';
?>

Allereerst beginnen we deze pagina ook weer met session_start(), we werken immers weer met sessievariabelen. Vervolgens controleren we of de variabele $_SESSION['logged_in'] bestaat en of de waarde van deze variabele niet gelijk is aan FALSE.

Als een van deze voorwaarden wel het geval is, sturen we de gebruiker met een header() direct door naar het login formulier en gebruiken we exit() om de verdere uitvoer van het script te stoppen.

Mocht de bezoeker wel ingelogd zijn, dan wordt niet voldaan aan het if-statement en wordt de rest van het script uitgevoerd. In ons geval houdt dat het geven van een welkomstbericht in. In dat bericht gebruiken we $_SESSION['gebruiker'] om de ingelogde gebruiker persoonlijk aan te spreken.

Op elke pagina waarop je enkel ingelogde gebruikers toegang wilt geven, plaats je dus regel 1-10 uit dit voorbeeld boven aan het script. Op die manier heb je altijd de zekerheid dat de pagina alleen aan ingelogde gebruikers getoond wordt.

Hier kun je een werkend voorbeeld van het loginscript vinden. De gebruikersnaam en wachtwoord zijn, zoals je in het script kunt zien, admin en voorbeeld.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Mijn eerste PHP script
  3. Variabelen
  4. Statements
  5. Loops
  6. Arrays
  7. Functies
  8. Formulieren
  9. Superglobals
  10. Sessies nader bekeken: een eerste loginscript
  11. Netjes scripten
  12. Debuggen: het oplossen van PHP fouten
  13. Slotwoord en referenties

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.