使用下面的代码,我想要一个页面,当它首次加载时,它要求重新验证,之后,(当会话有效时)它不再需要它。 当我使用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使用动态更改内容,但我仍然想知道是否可以执行我上面提到的内容。
答案 0 :(得分:1)
您正在测试$_POST
验证码,但您应该已将验证码状态保存在会话变量上。
在您测试if (isset($_POST['g-recaptcha-response']))
的位置,您可以测试$_SESSION['captcha_valid']
。如果您显示填写验证码的文本,请使用$_SESSION['captcha_valid'] = true
。
这样,只要用户解决验证码,只要会话有效,这个新状态就会一直有效。