2014-06-22 117 views
0

我正在開發Captcha課程,我即將完成,有一件事情不起作用PHP Static var not working

在我放置表單的文件中,我從這一行開始:

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

}

這是驗證碼功能檢查etered圖形驗證碼:

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你看,我做了自我:: do_generate FALSE 和回聲「TEST」的作品時,它的錯誤,(只是爲了檢查)

我在做什麼錯

+0

爲什麼你認爲驗證碼**不應該在點擊'back'時重新生成? –

+0

由於圖像是由php與imagettftext創建的,因此不會刷新,因此它會使用新生成的代碼顯示舊圖片。這是錯誤的 –

回答

1

當你點擊「返回」時,頁面被重新加載。你會得到一個新的CAPTCHA。

你的問題的前提是根本性的缺陷,因爲你只是隨機假設,這不應該發生的,而在現實中,這是完全由設計。

如果你可以反覆錯誤的話,它不會是一個非常有效的驗證碼,然後再回來再試一次;任何機器人都可能開始蠻橫逼迫它並從經驗中學習。

+0

確實如此,在var轉儲我看到它重新生成,但我叫這樣的圖片:和image.php我從captcha會話創建圖片,而頁面重新加載,圖片莫名其妙不是,如果我點擊F5,那麼整個頁面被重新加載包括圖片和整個羣體同步。 –

+0

我不知道你剛剛說了什麼。 –

+1

@RalphSchipper聽起來像你試圖說「顯示的capcha圖像被緩存,直到我刷新頁面」或其他一些這樣的「它是'image.php'響應」問題中的http緩存頭,特別是根據[此評論](http://stackoverflow.com/questions/24352160/php-static-var-not-working/24352459#comment37652660_24352160)。 – AD7six