在使用手冊中, 建議用 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, 外觀幾乎不能用設定方式更改。
◎方式二: 整合 Securimage
參考: http://czetsuya-tech.blogspot.tw/2009/08/how-to-integrate-securimage-captcha-to.html
1. 到 http://www.phpcaptcha.org/ 下載 Securimage。
2. 並將整個 securimage 目錄複製到 application\libraries 裡。
3. 在 controller 類別中定義產生圖形的方法:
private function captcha_img()
{
return '<img src="' . $this->data['siteURL'] . 'signup/securimage_jpg" />';
}
public function securimage_jpg()
{
$this->load->library('securimage/securimage');
$img = new Securimage();
//Change some settings
$img->image_width = 125;
$img->image_height = 40;
$img->perturbation = 0.85;
$img->image_bg_color = new Securimage_Color("#f6f6f6");
$img->use_transparent_text = true;
$img->text_transparency_percentage = 30; // 100 為全透明
$img->num_lines = 0;
$img->use_wordlist = true;
$img->show('backgrounds/bg6.jpg'); // 套背景圖並顯示
}
4. 比對驗證碼 ( 寫在 controller 類別的方法裡 ):
$this->load->library('securimage/securimage');
$img = new Securimage();
if( $img->check( $this->input->post('captcha') ) ) {
// ...
}
Securimage 提供的功能比 CAPTCHA Helper 多, 且方便設定。
沒有留言:
張貼留言