我正在参加Captcha课程,我差不多完成了,有一件事是行不通的
在我放置表单的文件中,我从这一行开始:
include 'captcha.php';
$captcha = Captcha::tryCaptcha(2,4,'#000', '#ffffff');
这是captch构造:
static $do_generate = TRUE;
function __construct($aantal_letters = 2, $aantal_cijfers = 4, $voorgrond = '#000000', $achtergond = '#ffffff') {
session_start();
if (self::$do_generate == TRUE) {
$letters = substr(str_shuffle('ABCDEGHJKLMNPQRSTUVWXYZ'),0 ,$aantal_letters);
$cijfers = substr(str_shuffle('23456789'),0 ,$aantal_cijfers);
$imgbreed = 18 * ($aantal_letters + $aantal_cijfers);
$_SESSION['imgbreed'] = $imgbreed;
$_SESSION['captcha'] = $letters . $cijfers;
$_SESSION['voorgrond'] = $this->hex2rgb($voorgrond);
$_SESSION['achtergond'] = $this->hex2rgb($achtergond);
}
}
所以换句话说,如果静态var $ do_generate == TRUE
,我会把我的东西放在会话中因此,当我发布表单时,验证码会被procesor.php
检查 像这样:if (Captcha::captcha_uitkomst() == TRUE) {
echo "Great";
} else {
echo "Wrong";
}
这是验证验证码代码的验证码功能:
static function captcha_uitkomst() {
if (strcmp($_SESSION['captcha'], strtoupper(str_replace(' ', '', $_POST['captcha-invoer']))) == 0) {
return TRUE;
} else {
echo "test";
self::$do_generate = FALSE;
return FALSE;
}
}
如果我输入正确的验证码,它一切都很好,那就有效了,我的回声很棒。 如果错了,我的回声错了,
完美,但....当我回到表格时(按回退一个历史记录)输入正确的验证码,它会重新生成一个新的验证码。
在类:captcha_uitkomst中,你看到我使self :: do_generate为FALSE 回声' TEST'如果它是假的(仅用于检查)
我做错了什么
答案 0 :(得分:1)
当您点击“返回”时,会重新加载该页面。你得到一个新的CAPTCHA。
你的问题的前提存在根本缺陷,因为你只是随机假设这不应该发生,而实际上这完全是设计的。
如果你可以反复搞错,那就不是一个非常有效的CAPTCHA然后再回去再试一次;任何机器人都可以开始强制它并从经验中学习。