乌徒帮技术范儿技术中心开发框架 › ci中的验证码captcha详解

ci中的验证码captcha详解

分类:开发框架

在codeigniter中,系统提供了一套验证码图片的方案,例如captcha辅助函数,我们可以设计自己的图片验证码。

官方手册中虽然也有提到,但是并不详细,本文针对网站中的验证码进行一个详细的讲解。

在控制器中,加入如下的代码:

$this->load->helper('captcha');
$vals = array(
	'word' => rand(1000, 10000),
	'img_path' => './data/captcha/',
	'img_url' => base_url('data/captcha').'/',
	'font_path' => './system/fonts/texb.ttf',
	'img_width' => 120,
	'img_height' => 30,
	'expiration' => 7200
);
$cap = create_captcha($vals);
$data['captcha'] = $cap['image'];
$this->session->set_flashdata('captcha_word',$cap['word']);

这段代码即让该控制器创建了一个验证码图片。我们先对创建过程详解,后文再来增加提交验证部分。

$this->load->helper('captcha')将该系统的辅助函数载入,create_captcha参数数组中,img_path的一个相对于系统根目录的文件夹,它将用来保存暂时的验证码图片。img_url是图片<img>的src地址,即调用地址,是一个网址形式。这两个值是必须的,决定着你的图片地址和存放位置。

word是要显示的字,这里采用了一个rand()来随机得到一个四位数。你也可以通过自己的方法,创建其他验证码,例如英文字母。这也是我们在后面要用来输入和验证的关键内容。

font_pat是文字的字体文件位置,CI提供了一个,你可以像我一样直接使用它。至于width和height不用解释,expiration是指更新过期的时间。而$cap = create_captcha($vals);就是创建了一个验证码对象,它包含了验证码图片、word、创建时间等,你可以像一个数组一样使用这些属性。

接下来讲解输入验证码和提交验证部分。

在上面的代码中,乌徒帮增加了

$data['captcha'] = $cap['image'];
$this->session->set_flashdata('captcha_word',$cap['word']);

两句,它们是用来创建数据的,我们在后面的程序中$this->load->view('register/register',$data);加载了视图,在视图文件中直接echo $captcha就显示出一张图片,记住,$captcha不是图片的地址,而是图片<img>。同时,在这张图片的边上放上一个<input type="text">让用户可以输入验证码,我给的name='captcha_word'。

而$this->session->set_flashdata('captcha_word',$cap['word']);一句是增加了一个闪存session,用来保存$cap['word'],即文字,只有当用户提交的内容中,验证码等于这个session时才验证通过。如何验证呢?我使用的是一个条件判断语句

if($this->session->flashdata('captcha_word') != $this->input->post('captcha_word'))

之所以要使用flash session闪存,是为了让验证码的文字信息使用之后随即消除,既和每次的验证码随机同步,又不占用空间。

从验证码图片的创建,到在视图中显示图片,再通过创建<input>和利用session对输入的验证信息进行验证,整个过程还是很清楚的。官方还给出了将captcha和数据库结合起来进行验证的方法,具体请参考官方手册的对应一节,本文不述。

已有1条评论 快速评论
  1. 寂寞 #3775楼 2013/07/08 20:57:14 回复

    赞一个

填写个人信息,赶快回复吧!