Page 1 sur 1

Mot de passe avec sessions php

Posté : 01 déc. 2014, 20:28
par ddubois
Bonjour,

J'ai une page d'accueil avec un unique champ de formulaire "mot de passe" et un bouton d'envoi.
Sur la page suivante j'ai écrit ce script censé vérifier l'envoi du formulaire et tester le mot de passe : si il est bon : j'ouvre une session afin de le passer de page en page afin d'éviter les accès directs à une page avec son adresse.
En fait cela fonctionne sur la première page mais lorsque je et un lien vers une 2e page en mettant en include mon code PHP : <?php include("protected.php"); ?> Cela ne fonctionne pas.
J'ai le message : Mot de passe incorrect ! Pourquoi le mot de passe ne passe t-il pas d'une page à une autre ? Voici mon code :

Code : Tout sélectionner

//protected.php <?php //$mot_de_passe = ""; //on créé une variable vide if(isset($_POST) && !empty($_POST['mot_de_passe'])) //si la variable 'mot-de-passe' existe et qu'elle n'est pas vide { $mot_de_passe=$_POST["mot_de_passe"]; $_SESSION['mot_de_passe'] = $_POST['mot_de_passe']; echo $_SESSION['mot_de_passe']; } else //sinon { $mot_de_passe = ""; //on créé une variable vide $_SESSION['mot_de_passe'] = ""; //interdit les accès directs à la page ! } if (isset($_SESSION['mot_de_passe']) AND $_SESSION['mot_de_passe'] != "980A" AND $_SESSION['mot_de_passe'] != "432A" AND $_SESSION['mot_de_passe'] != "925A" AND $_SESSION['mot_de_passe'] != "809A" ) // Le mot de passe est invalide ! { // on enregistre le mot de passe de notre visiteur comme variable de session ($mot_de_passe) echo $_SESSION['mot_de_passe']; echo 'Mot de passe invalide ou absent!'; //header ('location:index.php'); exit; } ?>
Merci de votre aide, car je galère depuis pas mal de temps.

Denis

Re: Mot de passe avec sessions php

Posté : 01 déc. 2014, 21:08
par hunomina972
Bonjours :)
Alors tu a ton message d'erreur qui s'affiche car comme le prévoie ton code, le mot de passe, enregistrer dans la session n'est pas bon lorsque tu arrive sur la page que tu veut visiter alors qu'il est bon quand tu envoie le formulaire...
C'est logique ;)
Regarde ton code, tu dis que tu include ta page protected.php a toute tes pages. Donc a chaque fois que tu va sur une page, le code est exécuter... LOGIQUE. Donc si tu vient d'une page autre que ta page formulaire, tu n'auras pas poster de mot de passe donc ton code va executer le 'else' et du coup le mot de passe que tu a entrer en te connectant et que tu as enregistrer dans la $_SESSION['mot_de_passe'] va etre modifier vu que c'est ce que le code prevoie et du coup tu ne pourra pas accéder a la page et le message d'erreur sera affiché ;)
Donc la solution serait déjà d'enlever tout les include de toute tes pages, ensuite que lorsque tu envoie le formulaire, cela te redirige vers la page protected.php, que le code soit executé et que donc ça verifie le mot de passe et tout et qu'a la fin de cette page tu fasse une redirection vers la page suivante. Du coup lorsque tu arrivera sur la page suivante, la $_SESSION vaudra le mot de passe que tu as entré dès le depart et il restera comme ça durant toute la navigation. ENSUITE comme tu veut restreindre les autre pages a ceux qui connaissent le mot de passe et bin tu construie tes page à partir de ce code :
<?php 
session_start();
if($_SESSION['mot_de_passe']='la valeur que tu veut') {

	// alors affiche le site

}

else {

	// affiche le message d'erreur

}
?>
Et donc ça verifiera si le mot de passe envoyé tout au debut (stocké dans la session lors de l'envoie du formulaire) est celui voulu et si c'est le cas et bien cela affiche la page ;)