2017-08-25 5 views
1

En utilisant le code ci-dessous, je veux une page, où quand il est d'abord chargé, il demande la vérification recaptcha, puis après, (alors que la session est valide) il ne l'exige pas à nouveau. Lorsque je clique sur Open Admin Tools après avoir vérifié avec recaptcha, il montre ce qu'il est censé faire; il affiche recaptcha complété, options: mais quand je clique sur test il va juste me demander de compléter la recaptcha. Comment est-ce que je le fais de sorte qu'il ne fait qu'une fois par session (valide)?Exiger Recaptcha seulement une fois par session

<html> 
    <head> 
     <title>Admin Settings Page</title> 
     <script src='https://www.google.com/recaptcha/api.js'></script> 
    </head> 
    <body> 
     <?php 
     if (!isset($_POST['g-recaptcha-response'])){ 
      ?> 
      <p>Please successfully complete the reCaptcha below to access the page.</p> 
      <form action="" method="post"> 
       <div class="g-recaptcha" data-sitekey="sitekey"></div> 
       <input type="submit" value="Open Admin Tools" /> 
      </form> 
      <?php 
     } else { 
      $captcha; 
      if (isset($_POST['g-recaptcha-response'])){ 
       $captcha=$_POST['g-recaptcha-response']; 
      } 
      if (!isset($captcha)) 
       $captcha = false; 
      if (!$captcha){ 
       echo '<h2>Please check the the captcha form.</h2>'; 
       exit; 
      } 
      $secretKey = "secretkey"; 
      $ip = $_SERVER['REMOTE_ADDR']; 
      $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$captcha."&remoteip=".$ip); 
      $responseKeys = json_decode($response,true); 
      if (intval($responseKeys["success"]) !== 1) { 
       echo '<h2>reCAPTCHA expired</h2>'; 
      } else { 
       ?> 
       <p>Recaptcha Completed, Options:</p> 
       <form action="" method="post"> 
        <input type="submit" value="test" /> 
       </form> 
       <?php 
      } 
     } 
     ?> 
     <br /> 
    </body> 
</html> 

J'ai une solution temporaire, j'utilise changer dynamiquement le contenu via javascript, mais je voudrais encore savoir s'il est possible de faire ce que j'ai demandé ci-dessus.

Répondre

1

Vous testez $_POST pour captcha, mais vous devriez avoir enregistré le statut captcha sur une variable de session. Lorsque vous testez if (isset($_POST['g-recaptcha-response'])), vous pouvez tester $_SESSION['captcha_valid']. Et où vous montrez un texte disant que le captcha a été complété, utilisez quelque chose comme $_SESSION['captcha_valid'] = true. De cette façon, dès que l'utilisateur résout le captcha, ce nouvel état reste valide tant que la session est valide.