Authenticatie

Op authenticatie.php hebben we de volgende logische structuur:

1) we includen de gegevens die nodig zijn voor connecten met de database (db_config.php)

2) we declareren twee functies:
to_login (), die de user terugstuurt naar de loginpagina als er iets fout gaat, en
check_login ($username, $password), die lijkt mij voor zichzelf spreekt. 'check_login' zet een sessievariabele met het user_id, wat handig is als je gegevens uit je DB wilt halen over degene die ingelogd is, en een sessievariabele die 'logged_in' heet met de waarde true als het inloggen goed is gegaan.

3) Het eerste dat we hierna controleren, is of $_SESSION['logged_in'] gezet is. Als dat wel zo is, is er al eerder succesvol ingelogd en mag de pagina getoond worden. Als dat niet zo is, zijn er twee mogelijkheden:
OF iemand vraagt de pagina rechtstreeks op in zijn browser zonder eerst netjes in te loggen (is dus niet toegestaan), OF iemand probeert keurig in te loggen vanaf de inlogpagina. In het laatste geval moeten we dus checken of $_POST['username'] en $_POST['password'] gezet zijn en, zo ja, met check_login () controleren of ze juist zijn.

Hieronder de hele code van authenticatie.php:

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
51
52
<?php
    session_start ();

    // de gegevens voor de DB connectie
    require '../../db_config.php';
    
    // terug naar de loginpagina. Met sleep bouwen we een pauze in tegen brute-forcen
    function to_login () {
        sleep (3);
        header ('Location: http://www.jouwsite.nl/login/');  // NIET VERGETEN AAN TE PASSEN!!!
    }
    
    function
check_login ($username, $password) {
        // query opstellen
        // je tabel kan er heel simpel uitzien:
        // id INT(11) auto_increment
        // username VARCHAR 64
        // password VARCHAR 64. Het password sla je op in je DB met een SHA1 hash
        // daarom staat SHA1 dus ook in de query

        $sql = "
            SELECT id
            FROM members
            WHERE username = '"
. mysql_real_escape_string ($username) . "'
            AND password = SHA1('"
. mysql_real_escape_string ($password) . "')
            "
;
        if ($res = mysql_query ($sql)) {
            if (mysql_num_rows ($res) == 1) {
                // de query is gelukt en we hebben 1 resultaat
                $row = mysql_fetch_assoc ($res);
                $_SESSION['id'] = $row['id'];
                $_SESSION['logged_in'] = true;
            }

            else {
                to_login ();
            }
        }

        else {
            to_login ();
        }
    }

    
    // eerst maar eens kijken of $_SESSION['logged_in'] bestaat
    if (!isset ($_SESSION['logged_in'])) {
        // nog niet eerder ingelogd, maar misschien heeft iemand net het loginformulier ingevuld?
        if (isset ($_POST['username'], $_POST['password'])) {
            check_login ($_POST['username'], $_POST['password']);
        }

        else {
            to_login ();
        }
    }

?>

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Alweer een login script?
  2. De loginpagina
  3. Verwerken van de formuliergegevens
  4. Authenticatie
  5. Tot slot

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.