Chapitre 5 - authentification Web en PHP L'objectif de ce cours est de découvri

Chapitre 5 - authentification Web en PHP L'objectif de ce cours est de découvrir comment soumettre l'accès à certaines zones d'un site à une authentification. Table des matières Evolution des besoins du contexte...................................................................................................2 Les sessions en PHP.......................................................................................................................2 Rappels sur le protocole HTTP....................................................................................................2 Rôle des sessions........................................................................................................................2 Utilisation des sessions................................................................................................................3 Fonctionnement interne des sessions..........................................................................................3 Les sessions et le framework MVC..................................................................................................3 Utilisation traditionnelle des sessions..........................................................................................3 Création d'une session............................................................................................................4 Définition de variables de session...........................................................................................4 Utilisation de variables de session..........................................................................................4 Destruction d'une session.......................................................................................................4 Intégration de la gestion des sessions dans le framework...........................................................5 Application : ajout au blog d'une page d'administration....................................................................7 Mise en oeuvre des sessions pour répondre au besoin...............................................................7 Ajout de l'action d'administration..................................................................................................7 Sécurisation de l'action d'administration......................................................................................9 Authentification de l'utilisateur....................................................................................................10 Résultat obtenu..........................................................................................................................13 Conclusion.....................................................................................................................................14 Webographie Openclassrooms CommentCaMarche B. Pesquet - 2013 Page 1 / 14 Evolution des besoins du contexte Nous allons reprendre notre blog d'exemple, en souhaitant disposer d'une page d'administration qui affiche des statistiques simples sur le blog, à savoir le nombre de billets et de commentaires. L'accès à cette page d'administration doit être réservé aux utilisateurs enregistrés du blog. Pour cela, une table T_UTILISATEUR est ajoutée à la base. Elle contient l'ensemble des utilisateurs. Par souci de simplicité, on ne distingue pas de hiérarchie entre les utilisateurs : ils ont tous le même droit d'accès à la page d'administration. Le jeu de données de test comporte à présent la création d'un utilisateur nommé admin. MonBlog.sql ... insert into T_UTILISATEUR(UTIL_LOGIN, UTIL_MDP) values ('admin', 'secret'); Pour répondre à ce besoin, il va falloir ajouter au blog une zone dont l'accès est soumis à authentification. C'est un scénario typique d'utilisation des s e s s i o n s. Les sessions en PHP Rappels sur le protocole HTTP Pierre angulaire du Web, le protocole HTTP est un protocole n o n c o n n e c t é (dit aussi sans état ou "stateless"). Cela signifie que chaque requête HTTP est indépendante des précédentes. Aucun mécanisme n'est prévu pour conserver un historique des requêtes. Ainsi, un serveur Web ne peut pas se "souvenir" qu'un ensemble de requêtes successives provient du même client, ce qui empêche des utilisations telles que le commerce électronique, pour lequel une mémorisation des achats de l'utilisateur à travers les différentes pages est nécessaire. Rôle des sessions Il est donc nécessaire de trouver un moyen de maintenir une certaine cohésion entre l'utilisateur et la requête, notamment : ● reconnaître les requêtes provenant du même utilisateur, ● associer un profil à l'utilisateur, ● connaître les paramètres de l'application pour l'utilisateur (nombre de produits vendus, ...). B. Pesquet - 2013 Page 2 / 14 PHP fournit cette fonctionnalité grâce aux s e s s i o n s. Le support des sessions permet de stocker des données préservées d'une requête à l'autre. On peut ainsi reconnaître un utilisateur et lui fournir un contexte personnalisé (exemple : son panier d'achats). Utilisation des sessions Voici les étapes permettant d'utiliser les sessions en PHP : 1. Lorsqu'un visiteur arrive sur le site, on demande à créer une session pour lui. 2. Une fois la session générée, on peut créer une infinité de variables de session. Quelle que soit la page du site, on utilise la variable superglobale $ _ S E S S I O N pour récupérer ou modifier les valeurs de ces variables. Par exemple, on peut créer une variable $_SESSION['nom'] qui contient le nom du visiteur, $_SESSION['prenom'] qui contient le prénom, etc. 3. Lorsque le visiteur se déconnecte du site, la session est fermée et PHP « oublie » alors toutes les variables de session créées. Il est souvent difficile de savoir précisément quand un visiteur quitte un site. Soit le visiteur clique sur un bouton de type « Déconnexion », soit on attend quelques minutes d'inactivité pour le déconnecter automatiquement : on parle alors de t i m e o u t. Fonctionnement interne des sessions Lors de sa première visite sur un site, un client Web se voit attribuer un i d e n t i f i a n t d e s e s s i o n unique. Ce numéro est souvent écrit en hexadécimal, par exemple : a02bbffc6198e6e0cc2715047bc3766f. Par défaut, cet identifiant est stocké dans un cookie nommé PHPSESSID ajouté aux échanges (requêtes HTTP) entre serveur et client. Si l'identifiant de session est présent dans la requête HTTP du client, PHP récupère les données associées à cette session. L'absence d'un identifiant ou d'un cookie de session dans une requête issue d'un client indique à PHP de créer une nouvelle session, et génère ainsi un nouvel identifiant de session. Par défaut, toutes les données relatives à une session particulière seront stockées sur le s e r v e u r, dans un fichier du répertoire spécifié par le paramètre session.save_path dans les options du fichier php.ini. Un fichier sera créé pour chaque session. Sous XAMPP, les sessions sont stockées par défaut dans le répertoire c:\xampp\tmp. Les sessions et le framework MVC Utilisation traditionnelle des sessions L'utilisation des sessions en PHP classique implique l'appel de plusieurs fonctions et l'emploi de la variable superglobale $_SESSION. B. Pesquet - 2013 Page 3 / 14 Création d'une session La création d'une nouvelle session s'effectue en appelant la fonction s e s s i o n _ s t a r t. <?php session_start(); ... Cette fonction doit obligatoirement être appelée au tout début de la page, avant tout code HTML. Définition de variables de session Une fois la session créée, on peut y ajouter de nouvelles variables identifiées par leur nom. $_SESSION['prenom'] = 'Baptiste'; $_SESSION['age'] = 36; Utilisation de variables de session Dans n'importe quelle page où la fonction session_start a été appelée, on peut utiliser $_SESSION pour accéder aux valeurs des variables de session. Il est prudent de vérifier au préalable que la variable existe, grâce à la fonction i s s e t. if (isset($_SESSION['prenom']) && isset($_SESSION['age'])) { echo 'Je te connais toujours ! Tu es ' . $_SESSION['prenom'] . ' et tu as ' . $_SESSION['age'] . ' ans.'; } else { echo "Je ne te connais pas..."; } Destruction d'une session En fin de visite, la destruction explicite d'une session se fait grâce à la fonction s e s s i o n _ d e s t r o y. session_destroy(); Après l'appel, la variable $_SESSION n'est plus utilisable. Rappel : cette destruction est automatique au bout d'un certain temps d'inactivité. Intégration de la gestion des sessions dans le framework La gestion des sessions est une problématique uniquement technique, indépendante de tout contexte métier. Elle a donc vocation à être intégrée dans notre framework. B. Pesquet - 2013 Page 4 / 14 Pour cela, nous allons lui ajouter une nouvelle classe nommée Session qui modélise une session. Session.php <?php /** * Classe modélisant la session. * Encapsule la superglobale PHP $_SESSION. * * @author Baptiste Pesquet */ class Session { /** * Constructeur. * Démarre ou restaure la session */ public function __construct() { session_start(); } /** * Détruit la session actuelle */ public function detruire() { session_destroy(); } /** * Ajoute un attribut à la session * * @param string $nom Nom de l'attribut * @param string $valeur Valeur de l'attribut */ public function setAttribut($nom, $valeur) { $_SESSION[$nom] = $valeur; } /** * Renvoie vrai si l'attribut existe dans la session * * @param string $nom Nom de l'attribut * @return bool Vrai si l'attribut existe et sa valeur n'est pas vide */ public function existeAttribut($nom) { return (isset($_SESSION[$nom]) && $_SESSION[$nom] != ""); } /** * Renvoie la valeur de l'attribut demandé * * @param string $nom Nom de l'attribut * @return string Valeur de l'attribut * @throws Exception Si l'attribut n'existe pas dans la session */ public function getAttribut($nom) { if ($this->existeAttribut($nom)) { return $_SESSION[$nom]; } else { throw new Exception("Attribut '$nom' absent de la session"); } } } On remarque que son constructeur déclenche l'appel à session_start(). Toute instanciation de cette classe permet donc de démarrer la gestion des sessions. B. Pesquet - 2013 Page 5 / 14 La classe Session dispose de méthodes qui encapsulent l'accès à $_SESSION afin de pouvoir lire, écrire et vérifier l'existence de variables de session. Une instance de la classe Session est ajoutée en tant qu'attribut de la classe R e q u e t e, qui modélise une requête HTTP dans le framework. Requete.php <?php require_once 'Session.php'; /** * Classe modélisant une requête HTTP entrante. * * @author Baptiste Pesquet */ class Requete { ... /** Objet session associé à la requête */ private $session; /** * Constructeur * * @param array $parametres Paramètres de la requête */ public function __construct($parametres) { $this->parametres = $parametres; $this->session = new Session(); } /** * Renvoie l'objet session associé à la requête * * @return Session Objet session */ public function getSession() { return $this->session; } ... B. Pesquet - 2013 Page 6 / 14 Le reste du framework n'est pas modifié. L'instanciation d'un objet Requete dans la méthode principale routerRequete() du routeur déclenche l'instanciation d'un objet Session, ce qui démarre uploads/s1/authentification-web-php.pdf

  • 73
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Fev 24, 2022
  • Catégorie Administration
  • Langue French
  • Taille du fichier 0.2755MB