验证码的大致原理是这样的,首先生成一个随机数,然后在数据数上面加上干扰图片,同时把该数据生成图片并输出。
这个数据保存在session中。然后把用户的输入与保存在session中的数据进行匹配,进行验证。
verifyCode.php代码如下:
<?php
Header("Content-type: image/PNG");
session_start();
//准备好随机数发生器种子
srand((double)microtime()*1000000);
//准备图片的相关参数
$im = imagecreate(62,20);
$black = ImageColorAllocate($im, 0,0,0); //RGB黑色标识符
$white = ImageColorAllocate($im, 255,255,255); //RGB白色标识符
$gray = ImageColorAllocate($im, 200,200,200); //RGB灰色标识符
//开始作图
imagefill($im,0,0,$gray);
while(($randval=rand()%100000)<10000);
{
$_SESSION["check_num"] = $randval;
//将四位整数验证码绘入图片
imagestring($im, 5, 10, 3, $randval, $black);
}
//加入干扰象素
for($i=0;$i<200;$i++){
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
//输出验证图片
ImagePNG($im);
//销毁图像标识符
ImageDestroy($im);
//header("content-type:image/png");
////定义header,声明图片文件,最好是png,无版权之扰;
////生成新的四位整数验证码
//session_start();//开启session;
//$authnum_session = '';
//$str = 'abcdefghijkmnpqrstuvwxyz1234567890';
////定义用来显示在图片上的数字和字母;
//$l = strlen(str); //得到字串的长度;
////循环随机抽取四位前面定义的字母和数字;
//for($i=1;$i<=4;$i++)
//{
//$num=rand(0,l-1);
////每次随机抽取一位数字;从第一个字到该字串最大长度,
////减1是因为截取字符是从0开始起算;这样34字符任意都有可能排在其中;
//$authnum_session.= str($num);
////将通过数字得来的字符连起来一共是四位;
//}
//session_register("authnum_session");
////用session来做验证也不错;注册session,名称为authnum_session,
////其它页面只要包含了该图片
////即可以通过_session["authnum_session"]来调用
在PHP开发中对比起Cookie,session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,本文简单介绍 session 的使用。
由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。实际上在服务器端的 Session 文件,PHP 自动修改 session 文件的权限,只保留了系统读和 ......
用 PHP 控制浏览器缓存是非常容易的,手册上也相关的说明,由于很多初学者没有把手册看完,所以还是会有很多关于这个问题的疑问,故在此专门发一篇文章,同时对相关的语法做了详细的说明,方便新手查阅。
要解决这一问题,可以通过 PHP 中的 header() 函数,发送特定的缓存控制原始 HTTP 标头,具体代码如下:
Exampl ......