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";
$

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Blue Captcha Image
Refresh

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.