Utiliser les sessions en PHP
Source:
https://apprendre-php.com/tutoriels/tutoriel-14-les-sessions.html
L’exercice ici est de créer un programme d’authentification (qui demande un username et un mot de passe), et d’enregistrer le username dans la session PHP. Le programme cible « admin.php » vérifiera qu’une session a bien été ouverte, et exploitera le nom d’utilisateur qui est dedans.
Voici le programme « authentification.php » :
<?php
// Definition des constantes et variables
define('LOGIN','jean');
define('PASSWORD','pollux');
$errorMessage = '';
// Test de l'envoi du formulaire
if(!empty($_POST))
{
// Les identifiants sont transmis ?
if(!empty($_POST['login']) && !empty($_POST['password']))
{
// Sont-ils les mêmes que les constantes ?
if($_POST['login'] !== LOGIN)
{
$errorMessage = 'Mauvais login !';
}
elseif($_POST['password'] !== PASSWORD)
{
$errorMessage = 'Mauvais password !';
}
else
{
// On ouvre la session
session_start();
// On enregistre le login en session
$_SESSION['login'] = LOGIN;
// On redirige vers le fichier admin.php
header('Location: admin.php');
exit();
}
}
else
{
$errorMessage = 'Veuillez inscrire vos identifiants svp !';
}
}
?>
<html>
<head>
<title>Formulaire d'authentification</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
<fieldset>
<legend>Identifiez-vous</legend>
<?php
// Rencontre-t-on une erreur ?
if(!empty($errorMessage))
{
echo '<p>', htmlspecialchars($errorMessage) ,'</p>';
}
?>
<p>
<label for="login">Login :</label>
<input type="text" name="login" id="login" value="" />
</p>
<p>
<label for="password">Password :</label>
<input type="password" name="password" id="password" value="" />
<input type="submit" name="submit" value="Se logguer" />
</p>
</fieldset>
</form>
</body>
</html>
Et maintenant le programme « admin.php » qui va récupérer le contenu de la session
<?php
// On prolonge la session
session_start();
// On teste si la variable de session existe et contient une valeur
if(empty($_SESSION['login']))
{
// Si inexistante ou nulle, on redirige vers le formulaire de login
header('Location: authentification.php');
exit();
}
?>
<html>
<head>
<title>Administration</title>
</head>
<body>
<?php
// Ici on est bien loggué, on affiche un message
echo 'Bienvenue ', $_SESSION['login'];
?>
</body>
</html>
Sur le serveur, par exemple sous Linux Debian, les sessions sont sauvegardées dans des fichiers sous /var/lib/php/sessions:
$ sudo ls -l /var/lib/php/sessions/
total 14
-rw------- 1 www-data www-data 0 Dec 10 21:42 sess_04rnvh68fmm6ck74j881rrcmdo
-rw------- 1 www-data www-data 0 Dec 10 21:42 sess_0g124kul23hvic82lgb0gvh70e
-rw------- 1 www-data www-data 0 Dec 10 21:30 sess_0t75i4oro7sfnfrt9bf4u2990m
-rw------- 1 www-data www-data 0 Dec 10 21:31 sess_1ehikduo7g2h8116m1epsfr06d
-rw------- 1 www-data www-data 0 Dec 10 21:20 sess_1pf8hh69u7v1tfhjke5ug6e9fk
-rw------- 1 www-data www-data 0 Dec 10 21:20 sess_4s9t6gq544c01nc04uoaradm18
-rw------- 1 www-data www-data 0 Dec 10 21:31 sess_54fq2tiuvl4lh6o4rloi9oa4ej
-rw------- 1 www-data www-data 0 Dec 10 21:22 sess_5defsupknhqvuh4db6r93uoc3i
-rw------- 1 www-data www-data 0 Dec 10 21:24 sess_7ulvcea02lo9ud0kgqbro7bkt5
-rw------- 1 www-data www-data 17 Dec 10 21:37 sess_8d6bj38gej4nqceonhe8rd5r9f
-rw------- 1 www-data www-data 0 Dec 10 21:40 sess_8lv1s1rgv9jrgnint8a264bueo
-rw------- 1 www-data www-data 0 Dec 10 21:30 sess_9f2m00ngmps9tt1il3571cj4vu
-rw------- 1 www-data www-data 0 Dec 10 21:40 sess_ajpdceiolfor978a1e7lpo4e6i
-rw------- 1 www-data www-data 0 Dec 10 21:32 sess_bdbd5v0hnlohh3j9rnkgibko20
$
$ sudo cat /var/lib/php/sessions/sess_8d6bj38gej4nqceonhe8rd5r9f
login|s:4:"jean";
$