CodeIgniter CAPTCHA验证 [英] CodeIgniter CAPTCHA validation

查看:183
本文介绍了CodeIgniter CAPTCHA验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个表单,用于将数据插入数据库,并检查数据是否是从人类发送的。我已经使用了已经集成到CI的CAPTCHA。



is my controller:

  $ checkrules = array(
'img_path'=> realpath(APPPATH。 / upload / checking / img')。'/',
'img_url'=> base_url()。'upload / checking / img /',
'font_path'=> realpath(APPPATH。 '../upload/checking/font.ttf'),
'img_width'=> 150,
'img_height'=> 30,
'expiration'=> 7200
);

$ check = create_captcha($ checkrules);
$ data ['checkimg'] = $ check ['image'];

$ this-> form_validation-> set_rules('name','Name','required | max_length [40] | xss_clean');
$ this-> form_validation-> set_rules('email','E-mail','required | valid_email | xss_clean');
$ this-> form_validation-> set_rules('website','Website','max_length [80] | prep_url | xss_clean');
$ this-> form_validation-> set_rules('comment','Comment','required | xss_clean');
$ this-> form_validation-> set_rules('check','Check','required | xss_clean');

if($ this-> form_validation-> run()== FALSE)
{
$ this-> load-> view('cms / theme ',$ data);
}
else
{
echosuccess;
$ this-> load-> view('cms / theme',$ data);我现在的问题是什么是验证CAPTCHA的最好方法?

我现在的问题是什么是验证CAPTCHA的最好方法?

1。)创建回调,我已经做了,但有问题,因为当我发送表单是新的CAPTCHA代码错误。



2。)将CAPTCHA的代码插入数据库并从中检查。问题是因为会有很多的加载数据库,它会很忙。



第二个问题。这个CAPTCHA只保存.jpg图片在文件夹或它可以是任何其他格式吗? (我问这是因为我想在使用后删除这个验证码。)

解决方案

  *无数据库使用的验证码验证示例
*而不是使用会话存储验证码值
*使用后将删除图像






  public function index()
{
$ this-> load-> helper(array('form','url','captcha'));
$ this-> load-> library('form_validation');

$ this-> form_validation-> set_error_delimiters('< div class =error>','< / div>');
$ this-> form_validation-> set_rules('username','Username','trim | required | xss_clean');
$ this-> form_validation-> set_rules('password','Password','trim | required | xss_clean | callback_check_database');
$ this-> form_validation-> set_rules('captcha','Captcha','callback_validate_captcha');

if($ this-> form_validation-> run()== FALSE)
{

$ original_string = array_merge ,范围('a','z'),范围('A','Z'));
$ original_string = implode(,$ original_string);
$ captcha = substr(str_shuffle($ original_string),0,6);

//字段验证失败。用户重定向到登录页面
$ vals = array(
'word'=> $ captcha,
'img_path'=>'./captcha/',
'img_url '=>'http://mycodeignitor.org/captcha/',
'font_path'=> BASEPATH.'fonts / texb.ttf',
'img_width'=> 150,
'img_height'=> 50,
'expiration'=> 7200
);

$ cap = create_captcha($ vals);
$ data ['image'] = $ cap ['image'];

if(file_exists(BASEPATH。../ captcha /\".$ this-> session-> userdata ['image']))
unlink(BASEPATH。 /captcha/\".$this->session->userdata['image']);

$ this-> session-> set_userdata(array('captcha'=> $ captcha,'image'=> $ cap ['time']。'。jpg')) ;
$ this-> load-> view('index_index',$ data);
}
else
{
if(file_exists(BASEPATH。../ captcha /\".$ this-> session-> userdata ['image']))
unlink(BASEPATH。../ captcha /\".$ this-> session-> userdata ['image']);

$ this-> session-> unset_userdata('captcha');
$ this-> session-> unset_userdata('image');
redirect('home','refresh');
}



}

public function validate_captcha(){
if($ this-> input-> ; post('captcha')!= $ this-> session-> userdata ['captcha'])
{
$ this-> form_validation-> set_message('validate_captcha'错误的验证码,你是终结者吗?
return false;
} else {
return true;
}

}


I have created some form for inserting data into database and for checking if the data was sent from human I have used CAPTCHA which is already integrated to CI.

This is my controller:

    $checkrules = array(
        'img_path' => realpath(APPPATH . '../upload/checking/img') . '/',
        'img_url' => base_url() . 'upload/checking/img/',
        'font_path' => realpath(APPPATH . '../upload/checking/font.ttf'),
        'img_width' => 150,
        'img_height' => 30,
        'expiration' => 7200
    );

    $check = create_captcha($checkrules);
    $data['checkimg'] = $check['image'];

    $this->form_validation->set_rules('name', 'Name', 'required|max_length[40]|xss_clean');
    $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|xss_clean');
    $this->form_validation->set_rules('website', 'Website', 'max_length[80]|prep_url|xss_clean');
    $this->form_validation->set_rules('comment', 'Comment', 'required|xss_clean');
    $this->form_validation->set_rules('check', 'Check', 'required|xss_clean');

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('cms/theme', $data);
    }
    else
    {
        echo "success";
        $this->load->view('cms/theme', $data);
    }

My question now is what's the best way to validate CAPTCHA?

1.) Creating callback, which I have already done, but there was problem because when I send form is error with new CAPTCHA code.

2.) Inserting CAPTCHA's code into database and check from it. Problem is because there will be a lot of loading database and it will be very busy.

And second question. Is this CAPTCHA saving only .jpg pictures in folder or it can be any other format there? (I'm asking this because I want to delete this captcha's after they are used.)

解决方案

 * Example of captcha validation without database useage
 * Instead of it used session to store captcha value
 * The images will be deleted after the use


public function index()
{   
    $this->load->helper(array('form', 'url','captcha'));
    $this->load->library('form_validation');

       $this->form_validation->set_error_delimiters('<div class="error">', '</div>');
       $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
       $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');
       $this->form_validation->set_rules('captcha', 'Captcha', 'callback_validate_captcha');

    if($this->form_validation->run() == FALSE)
       {

        $original_string = array_merge(range(0,9), range('a','z'), range('A', 'Z'));
        $original_string = implode("", $original_string);
        $captcha = substr(str_shuffle($original_string), 0, 6);

         //Field validation failed.  User redirected to login page
        $vals = array(
                'word' => $captcha,
                'img_path' => './captcha/',
                'img_url' => 'http://mycodeignitor.org/captcha/',
                'font_path' => BASEPATH.'fonts/texb.ttf',
                'img_width' => 150,
                'img_height' => 50,
                'expiration' => 7200
        );

        $cap = create_captcha($vals);
        $data['image'] = $cap['image'];

        if(file_exists(BASEPATH."../captcha/".$this->session->userdata['image']))
            unlink(BASEPATH."../captcha/".$this->session->userdata['image']);

        $this->session->set_userdata(array('captcha'=>$captcha, 'image' => $cap['time'].'.jpg'));
        $this->load->view('index_index',$data);
       }
       else
       {
            if(file_exists(BASEPATH."../captcha/".$this->session->userdata['image']))
                unlink(BASEPATH."../captcha/".$this->session->userdata['image']);

            $this->session->unset_userdata('captcha');
            $this->session->unset_userdata('image');
            redirect('home', 'refresh');
       }



}

public function validate_captcha(){
    if($this->input->post('captcha') != $this->session->userdata['captcha'])
    {
        $this->form_validation->set_message('validate_captcha', 'Wrong captcha code, hmm are you the Terminator?');
        return false;
    }else{
        return true;
    }

}

这篇关于CodeIgniter CAPTCHA验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆