2012-12-31 60 views
2

我試圖添加驗證碼到我的註冊表單。圖像被渲染得很好,除了會話變量始終是空的,所以它不會在所有工作..PHP驗證碼 - 會話始終爲空

我使用下面的類:http://www.ejeliot.com/pages/php-captcha

根據文檔我不得不作出一個PHP包含以下內容的文件:

<?php 
require('classes/PhpCaptcha.php'); 
$aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf'); 
$oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60); 
$oVisualCaptcha->SetBackgroundImages('captchaimgbg.jpg'); 
$oVisualCaptcha->Create(); 
?> 

並將此作爲圖像加入。

現在我查看了Create();函數,並在此函數中另一個名爲GenerateCode()的函數;被調用,它負責生成字母並將其放入會話變量中。

的代碼如下:

 function GenerateCode() { 
    // reset code 
    $this->sCode = ''; 

    // loop through and generate the code letter by letter 
    for ($i = 0; $i < $this->iNumChars; $i++) { 
     if (count($this->aCharSet) > 0) { 
      // select random character and add to code string 
      $this->sCode .= $this->aCharSet[array_rand($this->aCharSet)]; 
     } else { 
      // select random character and add to code string 
      $this->sCode .= chr(rand(65, 90)); 
     } 
    } 

    // save code in session variable 
    if ($this->bCaseInsensitive) { 
     $_SESSION[CAPTCHA_SESSION_ID] = strtoupper($this->sCode); 
    } else { 
     $_SESSION[CAPTCHA_SESSION_ID] = $this->sCode; 
    } 
    } 

的CAPTCHA_SESSION_ID是在類文件的頂部限定。 在我的索引中我有session_start(); ,我仔細檢查了這一點,這不是問題。即使我在create()方法中手動添加$ _SESSION ['bla'] ='bla',也是如此,$ _SESSION總是空的。功能,它不顯示。

有沒有人有一個想法是什麼導致這一點,或者我做錯了什麼?

謝謝!

+0

您是否已經完成了將要放入會話的變量的轉儲?它們是空的嗎? –

回答

5
<?php 

session_start(); 
require('classes/PhpCaptcha.php'); 
$aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf'); 
$oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60); 
$oVisualCaptcha->SetBackgroundImages('captchaimgbg.jpg'); 
$oVisualCaptcha->Create(); 

?> 

您需要在代碼的頂部session_start()開始對所有訪問/設置$_SESSION變量頁面的會話。

+0

他說:'在我的索引中,我有session_start()' –

+0

這似乎解決了這個問題,但是我所有的頁面都是通過我的index.php文件加載的(它有點mvc'ish),並且在索引中會話開始,你能解釋一下爲什麼我必須重新開始嗎?感謝您的快速回復壽! –

+0

@RyanNaddy,是在index.php文件中,但不是圖像文件。它必須位於所有訪問/設置$ _SESSION變量的頁面中。 –