IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

limitation du nombre d'essai d'un mot de passe


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut limitation du nombre d'essai d'un mot de passe
    Bonjour,

    Je suis débutante sur php. J'ai écumé tous le sforums et la doc officielle, mais je n'arrive pas à mes fins sur un problème hyper simple.

    Voici ce que je souhaite faire :

    Un utilisateur a une seule chance pour rentrer un code. S'il échoue au bout de la 1ère fois, il a perdu, il ne peut plus recommencer.

    J'ai été voir du côté des sessions, mais je suis bloqué. En fait j'ai réussi à faire fonctionner mes formulaires mais là le coup du nombre limité de mot de passe, c'est au dessus de mes capacités.

    Déjà première question : où dois-je mettre la condition : en entrée de page en comptant le nombre de venu du visiteur sur ma première page ?

    ou bien dois-je construire le truc à partir du nombre de clic sur le bouton valider (mais il me semble que ce n'est pas possible sur php) ?

    J'ai vu beaucoup de choses avec la question du login et du mot de passe mais mon visiteur n'a ps de login.

    Il vient "anonymement" sur la page et il a une seule chance de rentrer le code.. point...

    J'ai pensé à un truc en parcourant des tutos ... voici le code de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    // si le cookie existe, session_start() va chercher les infos de la session correspondante (qui sont situées sur le serveur, elles, contrairement au cookie) pour remplir le tableau $_SESSION
    // sinon il va générer un id et l'envoyer au navigateur par cookie pour que celui-ci le retienne, et créer un tableau $_SESSION vide
    // après le navigateur choisit de garder ou non le cookie qui a été envoyé, c'est là le problème
    session_start();
     
    if(isset($_SESSION['nb_venues'])) { // si une valeur a déjà été sauvegardée pour cet id
      // on l'affiche puis on l'incrémente
      echo "Vous êtes déjà passé {$_SESSION['nb_venues']} fois sur cette page !";
      $_SESSION['nb_venues']++;
    }
    else { // sinon
      // on l'initialise pour la prochaine fois qu'on passera ici
      echo "Je ne vous ai jamais vu, non ?";
      $_SESSION['nb_venues'] = 0;
    }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Coffre</title>
        </head>
        <body>
            <p>Voici le coffre fort privé attribué à Hubert de Sacinay.</p>
    		<p> Il vous faut retrouver le code et le rentrer ici pour pouvoir l'ouvrir.</p>
    		<img class='alignnone size-full wp-image-7258' src='http:adresse de l'image.jpg' alt='E2 - écran coffre ouvert' width='842' height='595'/>"
    		<p> Bonne chance </p>
            <form action="contenu coffre.php" method="post">
                <p>
                <input type="password" name="mot_de_passe" />
                <input type="submit" value="Valider" />
                </p>
            </form>
     
        </body>
    </html>

    Je voudrais faire un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    // si le cookie existe, session_start() va chercher les infos de la session correspondante (qui sont situées sur le serveur, elles, contrairement au cookie) pour remplir le tableau $_SESSION
    // sinon il va générer un id et l'envoyer au navigateur par cookie pour que celui-ci le retienne, et créer un tableau $_SESSION vide
    // après le navigateur choisit de garder ou non le cookie qui a été envoyé, c'est là le problème
    session_start();
     
    if(isset($_SESSION['nb_venues'])) { // si une valeur a déjà été sauvegardée pour cet id
      // on l'affiche puis on l'incrémente
      echo "Vous avez perdu";
      $_SESSION['nb_venues']++;
    }
    else { // sinon
      // on l'initialise pour la prochaine fois qu'on passera ici
      echo " Voici le coffre fort privé attribué à Hubert de Sacinay.
    		Il vous faut retrouver le code et le rentrer ici pour pouvoir l'ouvrir.
    		<img class='alignnone size-full wp-image-7258' src='http://adresse de l'image' alt='E2 - écran coffre ouvert' width='842' height='595'/>"
    		Bonne chance
            <form action="contenu coffre.php" method="post">
                <p>
                <input type="password" name="mot_de_passe" />
                <input type="submit" value="Valider" />
                </p>
            </form>;
      $_SESSION['nb_venues'] = 0;
    }
    ?>
    Bien sur ce code ne marche pas.....

    Un énorme merci aux personnes qui prendront la peine de lire ceci et d'y répondre

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si on suppose qu'il ne que jouer qu'une fois durant une SESSION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    session_start();
    //	unset($_SESSION['jeu_coffre']); // pour les tests (réinitialiser)
    	// ----------------
    	if( !empty($_POST['mot_de_passe']) ) // mot_de_passe pas vide (le formulaire a été soumis)
    	{
    		$mdp_recu = $_POST['mot_de_passe'];
    		$mdp_GAGNANT = 'toto';
    		$_SESSION['jeu_coffre']['gagne'] = ( $mdp_recu == $mdp_GAGNANT ); // true = gagné ! / false = perdu
    		$_SESSION['jeu_coffre']['deja_joue'] = 'oui';
    	}
    	// ----------------
    	if( empty($_SESSION['jeu_coffre']['deja_joue']) ) // vide
    	{
    ?>
    		<h4>Voici le coffre fort privé attribué à Hubert de Sacinay.</h4>
    		<p>Il vous faut retrouver le code et le rentrer ici pour pouvoir l'ouvrir.</p>
    		<img class="alignnone size-full wp-image-7258" src="http://adresse de l'image" alt="E2 - écran coffre ouvert" width="842" height="595"/>
    		<p>Bonne chance</p>
     
            <form action="" method="post">
                <p>
                <input type="password" name="mot_de_passe" />
                <input type="submit" value="Valider" />
                </p>
            </form>
    <?php
    	// ----------------
    	} else { // déja venu
    		if( !empty($_SESSION['jeu_coffre']['gagne']) ) // gagné !
    		{
    ?>
    		<h4>Vous avez gagné !!</h4>
    <?php
    		} else {
    ?>
    		<h4>Vous avez perdu...</h4>
    <?php		if( empty($_POST['mot_de_passe']) ){ ?>
    		<p>Vous ne pouvez jouer qu'une seule fois...</p>
    <?php		} ?>
    <?php
    		}
    	}
    	// ----------------
    	@var_dump($_SESSION['jeu_coffre']); // pour TESTER ce qui est enregistré
    ?>

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Il vient "anonymement" sur la page
    Ca change tout , et rend ton problème beaucoup plus compliqué qu'il n'y parait.

    La première étape est donc de définir comment identifier de manière unique et fiable un utilisateur anonyme ?

    IP : Pas possible puisque derrière une même IP peuvent cohabiter des centaines voir des milliers d'utilisateur
    Cookie : Que se passe t'il quand il le supprime ?

    Bref c'est assez compliqué et il n'existe pas de solution 100% fiable.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut La limitation ne fonctionne pas
    Déjà un énorme merci d'avoir pris la peine de lire et de répondre.

    Bon en gros, ça ne fonctionne pas.
    On peut revenir plusieurs fois sur la page et recommencer ..
    Petit indice , il y a un mot "null" écrit tout en bas en bleu......

    Sinon pour @grunk : je fais l'impasse sur le 100% fiable. Le but c'est que ça fonctionne mais si les utilisateurs trouvent un moyen de contourner tant pis.
    Pour plusieurs raisons : c'est un jeu en équipe (donc que quelq'un triche tout seul face à son ordi, pourquoi pas), mais 6 personnes ensemble, sachant que certaines ont pour mission de faire échouer l'ouverture du coffre... j'ai un doute. Après si les gens veulent tricher c'est leur problème de faire foirer le jeu.. d'autre part c'est un peu en temps limité et il y a d'autres étapes...
    je peux pas tout expliquer sinon je vais vous saouler avec les détails des trucs qui n'ont rien à voir avec php.. lol

    Pour l'option cookie, pourquoi pas, mais je n'en suis pas à ce niveau sur php.

    par contre je ne vois pas pourquoi c'est compliqué quand on est anonyme à partir du moment o^le bout de code "comptage du nombre de venue sur la page fonctionne". je pensais qu'il suffisait de rajouter une condition et de l'insérer correctement dans le reste et que le tour était joué (pour des pros)

    je vous remet le bout de code nombre de visite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    // si le cookie existe, session_start() va chercher les infos de la session correspondante (qui sont situées sur le serveur, elles, contrairement au cookie) pour remplir le tableau $_SESSION
    // sinon il va générer un id et l'envoyer au navigateur par cookie pour que celui-ci le retienne, et créer un tableau $_SESSION vide
    // après le navigateur choisit de garder ou non le cookie qui a été envoyé, c'est là le problème
    session_start();
     
    if(isset($_SESSION['nb_venues'])) { // si une valeur a déjà été sauvegardée pour cet id
      // on l'affiche puis on l'incrémente
      echo "Vous êtes déjà passé {$_SESSION['nb_venues']} fois sur cette page !";
      $_SESSION['nb_venues']++;
    }
    else { // sinon
      // on l'initialise pour la prochaine fois qu'on passera ici
      echo "Je ne vous ai jamais vu, non ?";
      $_SESSION['nb_venues'] = 0;

  5. #5
    Invité
    Invité(e)
    Par défaut
    Mon code fonctionne.

    Il faut bien mettre <?php session_start(); au début du fichier (sur la PREMIERE ligne)

    Quant au "Null" qui s'affiche, il sufffit de commenter (= mettre des // devant) la ligne de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //	@var_dump($_SESSION['jeu_coffre']); // pour TESTER ce qui est enregistré
    Dernière modification par Invité ; 22/02/2018 à 17h28.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut incompréhension
    Merci beaucoup pour avoir pris le temps de le montrer en test !
    Mais je retombe sur le même problème. Je n'ai pas bien expliquer ce que je voulais dire.
    Si je fais toto, ok ça marche, je tombe sur le coffre ouvert. le code fonctionne bien.
    si je fais un mauvais code, je tombe sur une page d'erreur.. le code fonctionne bien
    Parfait
    Par contre si je recommence et si je refais des essais de mots de passe, ça ne m'empêche pas de tester toutes les combinaisons jusqu'à trouver la bonne.
    J'ai essayé sur un autre ordi et je peux retenter autant de fois que je le veux.
    Le but c'est qu'au bout d'un seul mauvais essai, on ne puisse plus recommencer, c'est perdu et ça renvoie sur soit un message texte d'erreur classique soit vers une url avec la fonction echo.

    Tu as mis un bouton reset code : c'est pour renvoyer vers la page 'accueil" et reseter les sessions ?

    Encore un grand merci pour le temps que tu prends pour répondre à mes questions !

  7. #7
    Invité
    Invité(e)
    Par défaut
    Par contre si je recommence...
    recommencer quoi ? comment ?
    (si c'est en cliquant sur le bouton "reset coffre", c'est normal : ça reset les sessions)
    sinon explique... car moi je ne peux pas recommencer

    J'ai essayé sur un autre ordi et je peux retenter....
    Ca, c'est normal...

    Il suffit aussi de changer de navigateur (les SESSIONS sont rattachées à UN SEUL navigateur)
    Ou même de fermer puis rouvrir le navigateur (pour peu que la SESSION expire à la fermeture)

    C'est là qu'on peut voir l'intérêt d'enregistrer un COOKIE (sur l'ordinateur du visiteur).
    Dernière modification par Invité ; 22/02/2018 à 18h11.

  8. #8
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Hello,

    juste une petite question, quand tu parle de changement d'ordinateur, est-ce que cela sous entend que le code ne peux être testé uniquement une seule fois, tout utilisateur compris ? Ou une seule fois par utilisateur ?

    L'exemple donné par jreaux62 concerne la première solution.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Non.

    L'exemple que j'ai donné fonctionne avec une SESSION.
    Comme je l'ai dit, ça concerne UN ordinateur et surtout UN seul navigateur.


    N.B. Le bouton "reset Coffre" n'est là QUE pour les TESTS (ré-initialiser les SESSION) !
    Il ne faudra pas le mettre, évidemment.

  10. #10
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Oui pardon j'ai inversé, ton code c'est la deuxième hypothèse...

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/06/2015, 15h02
  2. Réponses: 5
    Dernier message: 21/12/2012, 23h53
  3. Exemple de Menu en HTA avec Password et Limite de nombre d'essais
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 10/09/2012, 23h34
  4. [Edit] Mot de passe - limitation du nombre de caractères
    Par bestorchidee dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 12/06/2009, 11h11
  5. Réponses: 5
    Dernier message: 09/03/2009, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo