每次会话只需要一次Recaptcha

时间:2017-08-25 18:13:28

标签: php html recaptcha

使用下面的代码,我想要一个页面,当它首次加载时,它要求重新验证,之后,(当会话有效时)它不再需要它。 当我使用recaptcha进行验证后单击“打开管理工具”时,它会显示它应该显示的内容;它显示recaptcha已完成,选项: 但是当我点击测试时,它会回去要求我完成重新计算。我该怎么做才能每次(有效)会话只做一次?

<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>

我有一个临时解决方法,我正在通过javascript使用动态更改内容,但我仍然想知道是否可以执行我上面提到的内容。

1 个答案:

答案 0 :(得分:1)

您正在测试$_POST验证码,但您应该已将验证码状态保存在会话变量上。

在您测试if (isset($_POST['g-recaptcha-response']))的位置,您可以测试$_SESSION['captcha_valid']。如果您显示填写验证码的文本,请使用$_SESSION['captcha_valid'] = true

之类的内容

这样,只要用户解决验证码,只要会话有效,这个新状态就会一直有效。