22 Fév2016
Script d'authentification avec les sessions
Objectif:
- Protéger l'accès à des pages privées.
- Utiliser et détruire les sessions.
- Redirection.
Énoncé :
Le but de l'exercice est de réaliser la structure suivante :
- Créer la page "login.php" qui demande à l’utilisateur la saisie de son login et son mot de passe dans un formulaire .
On suppose avoir deux utilisateurs: UserExelib (Login="Exelib",Passw="exe123") et Admin (Login="Admin",Passw="Admin123") :
- L'admin peut accéder à toutes les pages alors que UserExelib ne peut accéder qu'à la page secrète_1.php seulement.
- Si l’utilisateur demande les pages secrètes directement, il devra être redirigé vers la page d’authentification.
- Si l'utilisateur est déjà authentifié et redemande la page login.php , ça serait mieux de lui afficher un message de bienvenue et un lien pour la déconnexion au lieu d'afficher le formulaire d'authentification.
- Afficher dans les pages secrètes un message de bienvenue avec le login de l’utilisateur (Par exemple :Bonjour Exelib) et un lien pour la déconnexion.
Script de la page "login.php"
<?php //Démarrer la session session_start(); ?> <!doctype html> <html> <head> <title>Login</title> <meta charset="utf-8"> <style type="text/css"> /* Des styles pour le formulaire */ .login_cr{ width: 400px; margin: auto; } label { display: block; width: 150px; float: left; } </style> </head> <body> <!-- Si l'utilisateur n'est pas encore authentifier on affiche le formulaire --> <?php if(!isset($_SESSION["login"])){ ?> <div class="login_cr"> <form action="" method="post"> <fieldset> <legend>Formulaire d'authentification</legend> <!-- Si'il y une erreur de saisie on envoie l'erreur comme paramètre de url --> <?php if(isset($_GET["erreur"])) echo "<p style=\"color:red; \">login ou mot de passe incorrect</p>"; ?> <label for="login">Login :</label> <input type="text" name="login" id="login" placeholder="Entrez votre login" required/> <label for="passwd">Password :</label> <input type="text" name="passwd" id="passwd" placeholder="Entrez votre mot de passe" required> <input type="submit" name="Envoyer" value="Envoyer"/> </fieldset> </form> </div> <?php /*Traitement du formulaire après envoi*/ if(isset($_POST["Envoyer"])){ /*le cas d'un utilisateur normal remplissage du $_SESSION["login"] et redirection vers la page secrete_1.php */ if($_POST["login"]=="exelib" && $_POST["passwd"]=="exe123"){ $_SESSION["login"]="exelib"; header("Location:secrete_1.php"); } /*le cas d'un administrateur remplissage du $_SESSION["login"] , de $_SESSION["admin"] et redirection vers la page secrete_2.php */ else if ($_POST["login"]=="admin" && $_POST["passwd"]=="admin123"){ $_SESSION["login"]="admin"; $_SESSION["admin"]=true; header("Location:secrete_2.php"); } /*Le cas d'une erreur de login ou password envoie du paramètre erreur, dans ce cas on le récupère par $_GET["erreur"] et on affiche un message d'erreur (voir la ligne 34)*/ else{ header("Location:login.php?erreur=1"); } } } /*si l'utilisateur redemande la page login.php après authentification on lui affiche un message de bienvenue et le lien déconnexion*/ else{ echo "Bonjour ".$_SESSION["login"]."<br>"; echo "<a href=\"logout.php\">Déconnection</a>"; } ?> </body> </html>
Script de la page "secrete_1.php"
<?php //Démarrer une nouvelle session ou restaurer celle trouvée sur le serveur session_start(); //si $_SESSION["login"] est non vide implique que l'utilisateur a bien été authentifié if(isset($_SESSION["login"])){ echo "page secrete 1<br>"; echo "Bonjour ".$_SESSION["login"]."<br>"; echo "<a href=\"logout.php\">Deconnection</a>"; } else{ //Sinon demander à l'utilisateur de s'authentifier redirection vers la page login.php header("Location:login.php"); } ?>
Script de la page "secrete_2.php"
<?php session_start(); //si $_SESSION["admin"] est non vide donc l'utilisateur est un admin if(isset($_SESSION["admin"])){ echo "page secrete 2<br>"; echo "Bonjour ".$_SESSION["login"]."<br>"; echo "<a href=\"logout.php\">Deconnection</a>"; } else{ header("Location:login.php"); } ?>
Script de la page "logout.php"
<?php session_start(); if(isset($_SESSION["login"])){ //destruction de la session et redirection vers la page login.php unset($_SESSION); session_destroy(); header("Location:login.php"); } ?>