CakePHP1.2通过添加组件实现验证码功能

转帖|其它|编辑:郝浩|2009-04-17 16:51:12.000|阅读 985 次

概述:本文介绍了:CakePHP1.2通过添加组件实现验证码功能

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

利用Kcaptcha在CakePHP中实现了验证码功能,但发现Kcaptcha验证码特大了,虽然可以调整大小,但会经常出现看不到的情况,而 且在IE下很不清晰,在目前项目上用肯定会被KO掉。看了一下它在CakePHP的调用过程,其实就是向CakePHP添加了一个组件,于是我就想把自己 的验证码程序也添加进去。SO 开始:

1、第一步和Kcaptcha有很大区别,因为不用下载。在/app/vendors目录下建立一个vcode目录

2、在vcode目录下建立vcode.php文件,内容为你生成验证码的程序段,当然可能需要修改一下,反正我这里是按照Kcaptcha的方式写的。内容如下:

PHP代码
  1. class VCODE{   
  2.     function VCODE(){   
  3.         ob_start();   
  4.         $width=65;   
  5.         $height=20;   
  6.         $sourcestrings="0123456789aqwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";   
  7.         $image=imagecreate($width,$height);   
  8.         $colorarrs=array(   
  9.             imagecolorallocate($image,255,255,255),//white   
  10.             imagecolorallocate($image,0  ,0  ,  0)//black   
  11.         );   
  12.         unset($this->sessionval);   
  13.         imagesetthickness($image,3);   
  14.         //随机得到字符串个数   
  15.         $strsize=rand(3,5);   
  16.         imagefill($image,0,0,$colorarrs[0]);   
  17.         //一个个的写字符串到图片   
  18.         for($i=0;$i<$strsize;$i++){   
  19.             $i_temp=rand(1,62);   
  20.             $this->sessionval .=$sourcestrings[$i_temp];   
  21.             $fontcolor=imagecolorallocate($image,rand(0,155),rand(0,155),rand(0,155));   
  22.             $y_i = $height/2 + $font_size /3 ;   
  23.             imagechar($image,5, 1+ $i * $width /$strsize,5,$sourcestrings[$i_temp],$fontcolor);   
  24.         }   
  25.         //写入session,以后验证用   
  26.         //unset($_SESSION['vCode']);   
  27.         //$_SESSION['vCode'] = $sessionval;   
  28.         //添加杂点   
  29.         for($i=0;$i<$width /$height *2;$i++)   
  30.         {    $i_x=rand(0,$width);   
  31.             $i_y=rand(0,$height);   
  32.             $pixelcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));   
  33.             imagesetpixel($image,$i_x,$i_y,$pixelcolor);   
  34.         }   
  35.   
  36.         ob_clean();   
  37.         header('content-type:image/png');   
  38.         imagepng($image);   
  39.         imagedestroy($image);   
  40.     }   
  41.     function getKeyString(){   
  42.         return $this->sessionval;   
  43.     }   
  44. }  

3、在/app/controllers/components目录下建立Vcode.php文件,内容如下:

PHP代码
  1. class VcodeComponent extends Object{   
  2.     function startup($controller){   
  3.         $this->controller=$controller;   
  4.     }   
  5.   
  6.     function render(){   
  7.         App::import('Vendor','vcode/vcode');   
  8.         $vcode=new VCODE();   
  9.         $this->controller->Session->write('vcode',$vcode->getKeyString());   
  10.     }   
  11. }  

4、在你想在调用的controllers中加入,如indexController

PHP代码
  1. var $components=array('Session','Vcode');  

5、再在这个controllers中加入一个调用方法:

PHP代码
  1. function vcode(){   
  2.     $this->Vcode->render();   
  3. }  

好了,准备工作就完成了,下面就是在view里用了。

6、在你要调用的view里写上:

XML/HTML代码
  1. <img src="<?php echo $html->url('/index/vcode');?>" style="cursor:pointer;" onclick="document.getElementById('vcode').src='<?php echo $html->url('/index/vcode');?>?'+Math.random();" id="vcode" />  

刷新一下页面看看,OK了!!


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:fblog.net.cn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP