PHP 用session与gd库实现简单验证码生成与验证的类方法
php  /  管理员 发布于 7年前   139
验证码是为了防止机器灌水给网站带来污染以及增加服务器负担而出现的。目前大大小小的网站都有验证码。今天自己实现了一个简单的验证码类。说简单是因为没有加一些干扰的弧线等等,只是将文字旋转了一下。当然,因为字体的原因,要想一眼看出来并不容易。同时,为了避免字母的大小写与数字混淆,又去掉了那些看起来很像的字母数字。 把验证设置成了静态方法,因为生成验证码后已经把验证码存到了session中,验证时直接调用静态方法,而不需要实例化这个类了。 上面的字体可以随意设置。 下面的代码讲返回一个图像,实例化Captcha类后动态生成的一个图像。(outCaptcha.php) header(‘Content-Type:image/png'); 这句话的作用是告诉浏览器输出的是png图像,而不是html代码。浏览器收到后就将下面的输出解析成图像。 然后写一个html静态页面(testCaptcha.html),创建表单 仅仅是这样是不够的,看到表单提交的地址了么?那个就是用来验证验证码是否输入正确的代码: 这里还是要导入Captcha这个类,然后调用其静态方法来验证你的输入。最后销毁整个会话。 最后看看效果吧 太好了,成功了。那再故意输错试试,后退一下,然后刷新(如果不刷新浏览器将直接调用缓存中的验证码图片,这个时候我们的验证码还没有生成呢!所以无论怎么样都出错)。 当然,真正的验证码是可以单击换一张的,这利用了ajax技术。 以上这篇PHP 用session与gd库实现简单验证码生成与验证的类方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
类:width=$width; $this->height=$height; $this->countOfChars=$countOfChars; session_start(); } /** * 执行全部动作,生成验证码并直接输出 */ public function execute(){ $imageHandle=$this->createImage(); $this->createChars(); $this->drawChars($imageHandle); $this->outImage($imageHandle); } /** * 创建画布,并随机填充颜色 * @return 返回画布句柄 */ public function createImage(){ $imageHandle= imagecreate($this->width, $this->height); //随机背景颜色 $randColor=imagecolorallocate($imageHandle, 50, mt_rand(0, 50), mt_rand(0, 50)); imagefill($imageHandle, 0, 0, $randColor); return $imageHandle; } /** * 生成随机字符 */ private function createChars(){ //候选字符 $str='ABCDEFGHJKLMNPQRSTUVWXZabcdefghijkmnpqtuvwx2346789'; $chars=''; for($i=0;$i<$this->countOfChars;$i++){ $chars.=$str[mt_rand(0,strlen($str)-1)]; } $this->chars=$chars; //保存在会话中 $_SESSION['captcha']=strtolower($chars); } /** * 将字符写入图像 * @param type $imageHandle 图像句柄 */ private function drawChars($imageHandle){ if($this->chars!=null){ $font='/home/WWW/YuWeiLiShuFT.ttf'; for($i=0;$i
execute();
请输入验证码:
session_start();$inputCaptcha= trim($_POST['input_captcha']);require('Captcha.php');if(Captcha::isRight($inputCaptcha)){ echo '验证码正确';}else{ echo '验证码错误或已过期';}session_destroy();
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号