在使用手冊中, 建議用 DB 來記錄 captcha word; 個人是比較習慣使用 session 來記錄, 這樣可以省掉 DB 的操作。步驟:
1. 在 controller 類別的建構式中載入 CAPTCHA Helper 和 SESSION Class。
$this->load->library('session');
$this->load->helper('captcha');
2. 建立一個目錄用來暫存 captcha 圖片, 注意該目錄必須設定為 writeable。以下的範例是在 document root 建立名為 captcha 的目錄, 目錄裡的圖形檔過期後會自動被刪除。
3. 在 controller 類別中定義產生圖形的方法:
private function captcha_img()
{
$pool = '0123456789';
$word = '';
for ($i = 0; $i < 4; $i++){
$word .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
}
$this->session->set_userdata('captcha', $word);
$vals = array(
'word' => $word,
'img_path' => './captcha/',
'img_url' => $this->data['baseURL'] . 'captcha/',
'expiration' => 1200
);
$cap = create_captcha($vals);
return $cap['image'];
}
● $word 為亂數產生的字串, 可以自訂產生的方式。● 接著將 $word 值設定到 session 存起來, 以方便之後的比對。
● $vals 為建立 captcha 時的設定:
○ word: 欲顯示的文字
○ img_path: 暫存圖形的目錄
○ img_url: 圖形目錄的 URL
○ expiration: 過期的時間, 單位為秒
● $cap['image'] 會是包含圖片路徑的 <img> 標籤的字串
4. 比對驗證碼:
$this->input->post('captcha') == $this->session->userdata('captcha')
CAPTCHA Helper 優點是使用起來方便, 不需額外安裝其它外掛; 缺點是較為陽春, 預設大小為 150 * 30, 外觀幾乎不能用設定方式更改。