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:
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
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 ();
}
}
?>