Langage PHP

Appelez-nous au numéro (+212) 616 374 790 ou écrivez-nous à essaddouki@gmail.com

Demander le soutien en ligne de l'un de nos professeurs, à toute heure et où vous voulez, de 8h à minuit (GMT) Détails

Développer un système d'authentification en php et MySQL

Les sessions :

Les sessions constituent un moyen de conserver des variables sur toutes les pages de votre site.

Jusqu'ici, nous étions parvenus à passer des variables de page en page via la méthode GET (en modifiant l'URL : page.php?variable=valeur) et via la méthode POST (à l'aide d'un formulaire).

Mais imaginez maintenant que vous souhaitez transmettre des variables sur toutes les pages de votre site pendant la durée de la présence d'un visiteur. Ce ne serait pas facile avec GET et POST car ils sont plutôt faits pour transmettre les informations une seule fois, d'une page à une autre.

On sait ainsi envoyer d'une page à une autre le nom et le prénom du visiteur, mais dès qu'on charge une autre page ces informations sont « oubliées ». C'est pour cela qu'on a inventé les sessions.

Fonctionnement  des sessions :

Comment sont gérées les sessions en PHP ? Voici les trois étapes à connaître.

1- Un  visiteur arrive sur votre site (LOGIN) :

On demande à créer une session pour lui. PHP génère alors un numéro unique. Ce numéro est souvent très gros et écrit en hexadécimal, par exemple : a02bbffc6198e6e0cc2715047bc3766f. Ce numéro sert d'identifiant et est appelé « ID de session » (ou PHPSESSID). PHP transmet automatiquement cet ID de page en page.

2- Une  fois la session générée :

On peut créer une infinité de variables de session pour nos besoins. Par exemple, on peut créer une variable $_SESSION['nom'] qui contient le nom du visiteur, $_SESSION['prenom'] qui contient le prénom, etc. Le serveur conserve ces variables même lorsque la page PHP a fini d'être générée. Cela veut dire que, quelle que soit la page de votre site, vous pourrez récupérer par exemple le nom et le prénom du visiteur via la superglobale $_SESSION !

3-  Lorsque le visiteur se déconnecte de votre site (LOGOUT) :

La session est fermée et PHP « oublie » alors toutes les variables de session que vous avez créées. Il est en fait difficile de savoir précisément quand un visiteur quitte votre site. En effet, lorsqu'il ferme son navigateur ou va sur un autre site, le vôtre n'en est pas informé. Soit le visiteur clique sur un bouton « Déconnexion » (que vous aurez créé) avant de s'en aller, soit on attend quelques minutes d'inactivité pour le déconnecter automatiquement : on parle alors de timeout. Le plus souvent, le visiteur est déconnecté par un timeout.

Comment  utiliser les sessions ?

Tout ceci peut vous sembler un peu compliqué, mais c'est en fait très simple à utiliser. Vous devez connaître deux fonctions :

  • session_start() : démarre le système de sessions. Si le visiteur vient d'arriver sur le site, alors un numéro de session est généré pour lui. Vous devez appeler cette fonction au tout début de chacune des pages où vous avez besoin des variables de session.
  • session_destroy() : ferme la session du visiteur. Cette fonction est automatiquement appelée lorsque le visiteur ne charge plus de page de votre site pendant plusieurs minutes (c'est le timeout), mais vous pouvez aussi créer une page « Déconnexion » si le visiteur souhaite se déconnecter manuellement.

Attention :  Il y a un petit piège.

Il faut appeler session_start() sur chacune de vos pages AVANT d'écrire le moindre code HTML (avant même la balise <!DOCTYPE>). Si vous oubliez de lancer session_start(), vous ne pourrez pas accéder aux variables superglobales $_SESSION.

Passon  à la pratique :

La  page « page1.php » :

<?php
        //On démarre la session avant d'écrire du code HTML
       session_start();
       //On va créer quelques variables de session dans $_SESSION
       $_SESSION['nom']='ESSADDOUKI';
       $_SESSION['prenom']='Mostafa';
       $_SESSION['email']='essaddouki@gmail.com';

       // On va rediréger le navigauteur vers la page2.php
       header('location:page2.php');
?>

Ne vous y trompez pas : on peut créer les variables de session n'importe où dans le code (pas seulement au début comme je l'ai fait ici). La seule chose qui importe, c'est que le session_start() soit fait au tout début de la page.

Comme vous le voyez, j'ai créé trois variables de session qui contiennent ici le nom, le prénom et l’email du visiteur.

Maintenant, sur toutes les pages de mon site (bien entendu, il faudra démarrer le système de session sur toutes les pages avec session_start()), je peux utiliser si je le souhaite les variables $_SESSION['nom'], $_SESSION['prenom'] et $_SESSION['email'] !

Voici par exemple le code source de la page « page2.php » :

<?php
       // tous d'abord il faut démarrer le système de sessions
       session_start();

       //on peut vérifier la présence du session puis afficher ces variables
       if(isset($_SESSION['nom'])){
              echo "votre nom est :".$_SESSION['nom']." <br />";
              echo "votre prénom est :".$_SESSION['prenom']." <br />";
              echo "votre email est :".$_SESSION['email']." <br />";
       }
?>

Vous voyez ? On a juste fait démarrer la session avec un session_start(), puis on a affiché les valeurs des variables de session.

Comment  détruire une session ?

Si vous voulez détruire manuellement la session du visiteur, vous pouvez faire un lien « Déconnexion » amenant vers une page qui fait appel à la fonction session_destroy(). Néanmoins, sachez que sa session sera automatiquement détruite au bout d'un certain temps d'inactivité ou quand le visiteur efface l’historique des cookies dans son navigateur.

Maintenant on va créer la page « logout.php » :

<?php
       session_start();
       session_destroy();
       echo "Vous avez déconnecter de mon site .";
?>
<br />
<a href="login.php">login</a>

Exemple  d'un système d'authentification avec base de données:

On a par exemple deux (2) types d'utilisateurs (admins et users), chaque type sera dirégé vers une page spécifique (admin_page.php et user_page.php succéssivement), avec l'utilisation des sessions pour garder la session des utilisateurs connectés.

Il faut tout d'abord créer deux tables dans la base de données (tp_login) en utilisant phpMyAdmin :

  • admins (id_admin, login_admin, pwd_admin)
  • users (id_user, login_user, pwd_user)

et saisir quelques enregistrements pour tester le script.

La page login.php : est composée de trois parties …

1. Démarrage de système de sessions et teste de l'existance des sessions actives :

<?php
       // tous d'abord il faut démarrer le système de sessions
       session_start();

       // Si la session de l'admin est actif, on va diréger vers son page
       if(isset($_SESSION['id_admin'])){
              header('location:admin_page.php');
       }
       else if(isset($_SESSION['id_user'])){
              header('location:user_page.php');
       }
?>

2. Vérification du mot de passe, et création des variables de session en cas de validité de mot de passe, et la redirection vers la page equivalente.

<?php
       require_once 'connexion.php';
       if ($_POST) {
              extract($_POST);
              if($type_user=="admin"){
                     $sql="SELECT * FROM admins WHERE login_admin='$user_name' AND pwd_admin='$password'";
              }
              else{
                     $sql="SELECT * FROM users WHERE login_user='$user_name' AND pwd_user='$password'";
              }
              $resultat=mysqli_query($bdd,$sql);
              if($resultat){
                     if(mysqli_num_rows($resultat)==0){
                            echo 'Utilisateur ou mot de passe incorrecte !!';
                     }
                     else if($type_user=="admin"){
                            $row=mysqli_fetch_assoc($resultat);
                            $_SESSION['id_admin']=$row['id_admin'];
                            $_SESSION['login_admin']=$row['login_admin'];
                            header('location:admin_page.php');
                     }
                     else{
                            $row=mysqli_fetch_assoc($resultat);
                            $_SESSION['id_user']=$row['id_user'];
                            $_SESSION['login_user']=$row['login_user'];
                            header('location:user_page.php');
                     }
              }
              mysqli_free_result($resultat);
              mysqli_close($bdd);
       }
?>

3. Le formulaire :

<form action='login.php' method='POST'>
       <label>Nom d'utilisateur :</label>
       <input type="text" name="user_name" placeholder="Nom d'utilisateur " /><br />

       <label>Mot de passe :</label>
       <input type="text" name="password" placeholder="Mot de passe " /><br />

       <label>Type d'utilisateur :</label>
       <select name="type_user">
              <option value="admin">Administrateur</option>
              <option value="user" selected>Utilisateur</option>
       </select><br />

       <input type="submit" value="Se connecter" >
</form>

La page admin_page.php :

<?php
       // tous d'abord il faut démarrer le système de sessions
       session_start();

       if(!isset($_SESSION['id_admin'])){
              header('location:login.php');
       }
?>

Bonjour <?php echo $_SESSION['login_admin'];?>;
vous êtes l'adminitrateur de ce site ..
<br />
Pour déconnecter, cliquez <a href="logout.php">ici</a>

La page user_page.php :

<?php
       // tous d'abord il faut démarrer le système de sessions
       session_start();

       if(!isset($_SESSION['id_user'])){
              header('location:login.php');
       }
?>

Bonjour <?php echo $_SESSION['login_user'];?>;
vous êtes un utilisateur de ce site ..
<br />
Pour déconnecter, cliquez <a href="logout.php">ici</a>

Et finalement la page logout.php :

<?php
       // tous d'abord il faut démarrer le système de sessions
       session_start();
       session_destroy();

       header('location:login.php');
?>


Télécharger le code source de l'exemple

Partager ce cours avec tes amis :

Rédigé par M. ESSADDOUKI

Learning a new programming language is an easy thing, but the most difficult thing is how to design efficient algorithms for real-world problems, so don't be a programmer, be a problems solver.

Cours Similaires :