Probbleme de vérification entre un mot de passe et un cookie [Résolu/Fermé]

Signaler
Messages postés
18
Date d'inscription
dimanche 22 décembre 2013
Statut
Membre
Dernière intervention
6 novembre 2019
-
dzavatar
Messages postés
18
Date d'inscription
dimanche 22 décembre 2013
Statut
Membre
Dernière intervention
6 novembre 2019
-
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 :)

5 réponses

Messages postés
2379
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
421
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
Messages postés
27947
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 mars 2020
2 209
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 ..
Messages postés
18
Date d'inscription
dimanche 22 décembre 2013
Statut
Membre
Dernière intervention
6 novembre 2019

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
Messages postés
27947
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 mars 2020
2 209
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).


Messages postés
18
Date d'inscription
dimanche 22 décembre 2013
Statut
Membre
Dernière intervention
6 novembre 2019

ce n'est pas faux :) la modif n'est pas encore énorme à faire après tout :)