Pratique de MySQL et PHP- P62 pptx

5 230 0
Pratique de MySQL et PHP- P62 pptx

Đang tải... (xem toàn văn)

Thông tin tài liệu

7.1 Authentification 283 $internaute = $this−>bd−>objetSuivant($res) ; // L’internaute existe−t− il ? if ( is_object ($internaute)) { // Vérification du mot de passe if ($internaute−>mot_de_passe == md5($mot_de_passe)) { // Tout va bien. On insère dans la table SessionWeb $maintenant = date ("U"); $ t e m p s _ l i m i t e = $maintenant + s e l f : : DUREE_SESSION ; $email = $this−>bd−>prepareChaine($email); $nom = $t h i s −>bd−>prepareChaine($internaute−>nom ) ; $prenom = $this −>bd−>prepareChaine($internaute−>prenom ) ; $insSession = "INSERT INTO SessionWeb (id_session , email , nom , " . "prenom , temps_limite) VALUES (’ $id_session ’ , " . " ’$email ’ , ’$nom ’ , ’$prenom ’ , ’$temps_limite ’)"; $resultat = $this−>bd−>execRequete ($insSession); return true ; } / / Mot de passe i n c o r r e c t ! else return false ; } else { // L’utilisateur $email est inconnu return false ; } } Si les deux tests successifs sont couronnés de succès, on peut créer la session. On dispose de toutes les informations nécessaires pour insérer une ligne dans SessionWeb (identifiant, e-mail, nom et prénom), la seule subtilité étant la spécification de la durée de validité. La fonction PHP date() permet d’obtenir la date et l’horaire courants sous de très nombreux formats. En particulier la représentation « UNIX », en secondes depuis le premier janvier 1970, est obtenue avec le format "U". L’expression date("U") donne donc le moment où la session est créée, auquel il suffit d’ajouter le nombre de secondes définissant la durée de la session, ici 1 heure=3600 secondes, définie par la constante DUREE_SESSION de la classe Controleur. La deuxième méthode vérifie qu’une session existante est valide. Elle prend en argument un objet PHP correspondant à une ligne de la table SessionWeb, et compare l’attribut tempsLimite à l’instant courant. Si la période de validité est dépassée, on détruit la session. private function sessionValide ($session) { // Vérifions que le temps limite n’est pas dépassé $maintenant = date ("U"); if ($session−>temps_limite < $maintenant) { // Destruction de la session 284 Chapitre 7. Production du site session_destroy () ; $ r eq u e t e = "DELETE FROM SessionWeb " . "WHERE id_session=’$session−>id_session ’"; $resultat = $this−>bd−>execRequete ($requete ) ; return false ; } else { // C’ est bon ! On prolonge la session $ t e m p s _ l i m i t e = $m ainte nant + s e l f : : DUREE_SESSION ; $prolonge = "UPDATE SessionWeb SET temps_limite=’ $temps_limite ’ " . " WHERE id_session=’$session−>id_session ’ "; $this−>bd−>execRequete ($prolonge) ; } return true ; } Enfin on a besoin d’un formulaire pour identifier les internautes. Bien entendu, on utilise la classe Formulaire, et une fonction qui prend en argument le nom du script appelé par le formulaire, et un e-mail par défaut. private function formIdentification($url_auth , $email_defaut="" ) { // Demande d ’ i d e n t i f i c a t i o n $form = new Formulaire ("post" , $url_auth); $form−>debutTable (); $form−>champTexte("Email" , "login_email " , "$email_defaut" , 30, 60) ; $form−>champMotDePasse (" Passe " , " login_password" , "" , 30) ; $form−>champValider ("Identification" , "ident"); $form−>finTable () ; return $form−>formulaireHTML () ; } Nous voilà prêts à créer la méthode contrôlant les accès au site. Initialisation des sessions Chaque contrôleur dispose, par héritage de la classe Controleur, d’un objet session initialisé dans le constructeur par un appel à la méthode initSession() (voir le code du constructeur dans le chapitre précédent, page 245). Cette initialisation regarde si une session existe et vérifie qu’elle est valide. Si oui, l’objet session est créé, représentant la ligne de SessionWeb correspondant à la session stockée. Sinon l’objet session reste à null et on considère que l’utilisateur n’est pas connecté. La fonction prend en argument l’identifiant de session. protected function initSession ($id_session) { $ r eq u e t e = "SELECT ∗ FROM SessionWeb WHERE id_session = ’ $id_session ’ " ; 7.1 Authentification 285 $resultat = $this−>bd−>execRequete ($requete ) ; $this−>session = $this−>bd−>objetSuivant ($resultat); /∗∗ ∗ On vérifie que la session est toujours valide ∗ / if ( is_object ($this−>session)) { // La session existe . Est−elle valide ? if (!$this−>sessionValide ($this−>session )) { $this−>vue−>content = "<b>Votre session n ’ est pas (ou plus) valide.<br/></b>\n"; $this−>session = null; } else { // La session est valide : on place le nom // de l ’utilisateur dans la vue pour pouvoir l ’afficher $this−>vue−>session_nom = $this−>session−>prenom . " " .$this−>session−>nom ; } } // Et on renvoie la session (qui peut être null) return $this−>session ; } Dans chaque action d’un contrôleur on peut tester si l’objet session existe ou pas. Si non, il faut refuser l’accès aux actions reservées aux utilisateurs connectés. On dispose pour cela de la méthode controleAcces() suivante, qui affiche un message de refus d’accès si l’utilisateur n’a pas ouvert de session : function controleAcces() { if (! is_object ($this−>session )) { $this−>vue−>contenu = "Vous devez être identifié " . "pour accéder à cette page<br/>" ; echo $this−>vue−>render("page") ; exit ; } } À titre d’exemple voici l’action index du contrôleur Notation. On commence par appeler controleAcces(), et on sait ensuite, si l’action continue à se dérouler, que l’utilisateur est connecté. On dispose même de l’objet $this->session pour accéder à ses prénom, nom et e-mail si besoin est. function index () { // Définition du titre $this−>vue−>titre_page = "Recherche et notation des films" ; // Contrôle de la session $this−>controleAcces() ; // Maintenant nous sommes identifiés 286 Chapitre 7. Production du site $this−>vue−>setFile ("contenu" , "notation . tpl ") ; // Production du formulaire de recherche $this−>vue−>formulaire = $this−>formRecherche() ; echo $this−>vue−>render("page") ; } Finalement on dispose d’une méthode statutConnexion() qui se charge de placer dans la vue les informations relatives à la session courante. Deux cas sont possibles : 1. soit la session existe, et on affiche le nom de l’utilisateur connecté, avec un lien de déconnexion ; 2. soit elle n’existe pas, et on affiche le formulaire de connexion. Cette information est placée dans l’entité auth_info de la vue. Notez dans le code l’exploitation des informations de l’objet $this->session protected function statutConnexion () { // S’ il n’y a pas de session: on affiche le formulaire // d’identification , sinon on place un lien de déconnexion if ($this−>connexion()) { $this−>vue−>auth_info = "Vous êtes " . $this−>session−>prenom . " " . $t his −>session−>nom . " . " . " Vous pouvez vous <a href =’? ctrl=auth&amp; action=logout’>" . "déconnecter </a> à tout moment. " ; } else { $this−>vue−>auth_info = $this−>FormIdentification("?ctrl=auth&amp;action=login"); } } 7.1.3 Les actions de login et de logout Ces deux actions font partie du contrôleur Auth. L’action login reçoit un em-ail et un mot de passe (qu’il faut vérifier) et tente de créer une session avec les utilitaires de gestion de session hérités de la classe Controleur. function login () { $this−>titre_page = "Identification"; // Si on est déjà connecté : on refuse if ( is_object ($this−>session)) { $this−>vue−>contenu = "Vous êtes déjà connecté . Déconectez− vous " . " au préalable avant de choisir un autre compte."; } 7.1 Authentification 287 else if (isSet($_POST[ ’login_email ’ ]) and isSet ($_POST[ ’login_password ’]) ) { // Une paire email/mot de passe existe. Est− elle correcte ? if ($this−>creerSession ($_POST[ ’login_email ’] , $_POST[ ’ login_password ’] , session_id ())) { // On initialise l ’objet session avec les données qu’on // vient de créer $this−>initSession (session_id ()); // Affichage d’une page d’ accueil sympathique $this−>vue−>setFile ("contenu" , "auth_login . tpl ") ; } else $this−>vue−>contenu .= "<center><b>Votre identification a échoué . </b></center >\n" ; } else { $this−>vue−>contenu = "Vous devez fournir votre email et votre mot de passe<br/>" ; } // Rafraichissement de la partie du contenu qui montre soit // un formulaire , de connexion , soit un lien de déconnexion $this−>statutConnexion (); echo $this−>vue−>render("page") ; } La figure 7.1 montre la présentation du site juste après l’identification d’un inter- naute. Outre le message d’accueil dans la partie centrale, on peut noter que le statut de connexion affiché dans le menu à droite montre maintenant les prénom et nom de l’internaute connecté, ainsi qu’un lien qui pointe vers l’action de déconnexion logout. Cette dernière vérifie que l’internaute est bien connecté (autrement dit, que l’objet session existe) et effectue alors une destruction dans la table, ainsi que par appel à la fonction PHP session_destroy(). L’objet session est également remis à null et le bloc d’information dans la vue réinitialisé. public function logout () { $this−>vue−>titre_page = "Déconnexion" ; // Vérifions qu’on est bien connecté if ( is_object ($this−>session)) { $this−>vue−>contenu = "Vous étiez i d e n t i f i é sous le nom " ."<b>{$this−>session−>prenom } { $this −>session−>nom} < / b> <br/>"; session_destroy () ; . spécification de la durée de validité. La fonction PHP date() permet d’obtenir la date et l’horaire courants sous de très nombreux formats. En particulier la représentation « UNIX », en secondes depuis le. d’ajouter le nombre de secondes définissant la durée de la session, ici 1 heure=3600 secondes, définie par la constante DUREE_SESSION de la classe Controleur. La deuxième méthode vérifie qu’une session. un lien de déconnexion ; 2. soit elle n’existe pas, et on affiche le formulaire de connexion. Cette information est placée dans l’entité auth_info de la vue. Notez dans le code l’exploitation des

Ngày đăng: 06/07/2014, 00:20

Mục lục

    Première partie – Programmation web avec MySQL/PHP

    Chapitre 1 – Introduction à MySQL et PHP

    1.1 Introduction au Web et à la programmation web

    1.1.2 Documents web : le langage XHTML

    1.2 Programmation web avec MySQL et PHP

    1.3 Une première base MySQL

    1.3.1 Création d'une table

    1.3.2 L'utilitaire mysql

    1.3.3 L'interface PhpMyAdmin

    1.4 Accès à MySQL avec PHP

Tài liệu cùng người dùng

Tài liệu liên quan