繁体   English   中英

PHP静态变量不起作用

[英]PHP Static var not working

我正在上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);
    }
}

所以换句话说,如果静态变量$ 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”为假时有效(仅用于检查)

我究竟做错了什么

当您点击“返回”时,页面将重新加载。 您将获得一个新的验证码。

您的问题的前提从根本上来说是有缺陷的,因为您只是随机地认为这不应该发生,而实际上这完全是设计使然。

如果您可以反复输入错误然后返回,然后再试一次,那将不是一个非常有效的验证码。 任何机器人都可以开始强行强迫它, 并从经验中学习

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM