Probbleme de vérification entre un mot de passe et un cookie

Résolu/Fermé
dzavatar Messages postés 18 Date d'inscription dimanche 22 décembre 2013 Statut Membre Dernière intervention 6 novembre 2019 - Modifié par NHenry le 15/08/2015 à 17:31
dzavatar Messages postés 18 Date d'inscription dimanche 22 décembre 2013 Statut Membre Dernière intervention 6 novembre 2019 - 18 août 2015 à 01:05
Bonjour à tous , je viens vers vous car j'essaie de trouver mon erreur depuis de longue heure maintenant sans trouver la moindre explication.

J'essaie de protéger une catégorie du site avec la demande d'un mdp.
J'ai 5 catégories ( 1,2,3,4,5), ce sont des albums photos.
j'ai commencer la page par tester si il y avait ou non l'envois d'un $_POST et si celui-ci contient le bon mdp il crée un cookie.
Ensuite je test à savoir si je suis ou non dans la catégorie à protéger, Je fait le test que si il n'existe pas de cookie ou si la valeur de celui-ci est autre que 'ok' j'affiche le formulaire sinon il affiche la page caché.
ou au final si ce n'est pas la catégorie 5 , j'affiche normalement les autres contenue.

Ici la réaction est que quelque sois le mot de passe entrée , bon ou mauvais , un refresh suffit pour qu'il considère que le cookies est 'ok' ...

<?php

if(isset($_POST["mot_de_passe"])){
          $pass=$_POST["mot_de_passe"];

          if($pass=="Vision"){
             setcookie('uninstant', 'ok', (time() + 3600));
          }
       }



if($_GET['souscat']=='5'){
       



      if(!isset($_COOKIE['uninstant']) || $_COOKIE['uninstant']!='ok'){
         echo '   <div id="corps">
                  <p>Veuillez vous identifier pour accéder aux albums de cette catégorie :</p></br>
 
               <form action="" method="post">
                  <p>mot de passe : <input type="password" name="mot_de_passe"/><input type="submit" value="Valider" class="mdp" style="width:60px;color:#fff;"/></p>
               </form>
            </br>
                  <p>Si vous ne posedez pas le mot de passe vous pouvez en faire la demande par le formulaire de contact </p>
                 </div> ';

      }else{
         echo'c\'est bon';
      }

 

}else{
   echo $_GET['souscat'];
}





?>






Je vous remercie d'avance pour votre aide :)
A voir également:

5 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
17 août 2015 à 10:37
Salut,

Ton code est correct et on est bien obligé de saisir le bon mot de passe.

Par contre après avoir saisie le mot de passe, on est effectivement obligé de rafraichir la page (ou de renvoyer le formulaire avec n'importe quelle valeur, le but étant simplement de rafraichir la page) pour afficher "c'est bon".
Cela vient du fait que lorsque ton script crée le cookie avec la fonction setCookie, celui-ci ne sera disponible pour PHP uniquement lors du prochain chargement du script (fonctionnement normal des cookies).

Le solution simple pour résoudre ceci est de recharger la page après la création du cookie via une redirection en php :
          if($pass=="Vision"){
                    setcookie('uninstant', 'ok', (time() + 3600));
                    header('Location: ' . $_SERVER['REQUEST_URI']);
                    exit();
          }


Bonne journée
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
17 août 2015 à 10:57
Bonjour,

A savoir également qu'un utilisateur peut avoir désactivé (interdit) la création des cookies sur son ordi ... cette solution n'est alors plus valable.
Je pense qu'il serait préférable de passer par l'utilisation des SESSIONS (et cela évitera également d'avoir à faire un refresh de la page).

Une autre solution également envisageable serait d'utiliser une base de données....
En gros... tu remplaces ton cookie par une table ..
0
dzavatar Messages postés 18 Date d'inscription dimanche 22 décembre 2013 Statut Membre Dernière intervention 6 novembre 2019
17 août 2015 à 20:48
Merci pour vos réponse , je ne connaissait pas la possibilité de $_SERVER['REQUEST_URI'] ....

en faite je découvre en même temps la réécriture d'URL et je me perds un peu, du coup dans l'écriture des liens ... Je rencontre le soucis par exemple pour le menu ou l'écriture change sur la page active du coup que se soit dans le header location ou dans if get page = le fait de noter en lien Album-1-5 par exemple ne semble pas être la bonne façon de l'écrire...

J'ai choisis le cookie car je n'ai pas de zone membres à gérer, c'est un site photo ou le seul intérêt est de bloquer l'accès à la catégorie nue. Celui qui veut me fais une demande via le formulaire de contact , ou c'est moi qui le donne en cas de besoin à la personne intéressé.. cela me permet de plus a si besoin le changer rapidement si abus sans pour autant devoir gérer une DB. Je garde la session et la DB pour ma partie admin.

en tout cas merci , je vais pouvoir régler se soucis et passer au suivant :) qui est pourquoi mes liens du menu ne change pas en fonction de la page :p
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
18 août 2015 à 00:22
J'ai choisis le cookie car je n'ai pas de zone membres à gérer,

Les variables de SESSION peuvent tout aussi bien assurer ce rôle.
En gros.. c'est la même chose que des Cookies...sauf qu'ils sont gérés côté serveur et non poste utilisateur...
Ce qui permet de ne pas être confronté à des soucis d'autorisation pour pouvoir créer les cookie sur l'ordi du user.
De plus... les SESSIONS sont automatiquement détruite à la fermeture du navigateur internet (sous quelques minutes selon le réglage du serveur).


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dzavatar Messages postés 18 Date d'inscription dimanche 22 décembre 2013 Statut Membre Dernière intervention 6 novembre 2019
18 août 2015 à 01:05
ce n'est pas faux :) la modif n'est pas encore énorme à faire après tout :)
0