PHP开发一个用户登陆模块,关键技术(session会话、cookie应用、GD库应用)大家好,今日我们一起来开发一个PHP随机验证码的生成实例。首先,我们来看一下效果:开发随机验证码使用到的函数有以下几个。如果有不明白这些函数的使用方法的朋友,请参考PHP5开发手册。1.imagecreatetruecolor();//创建一个真彩的画布2.imagecolorallocate();//分配颜色3.imagefill();//填充颜色4.imagerectangle();//画一个矩形,用于绘制验证码的边框5.imagettftext();//将文本内容写入到图像中6.imagesetpixel();//绘制一个单一像素6imageline();//绘制一条线7.imagepng();//输出图像8.imagedesctroy();//销毁图像,释放内容PHP开发随机验证码的步骤与思路1.获取随机验证码的内容2.创建一个真彩画布,分配字体颜色跟背景颜色3.开始绘画4.输出图像5.销毁图像6.自定义一个函数用来获取随机验证码(本人目前在淘宝网上注册了一家小小的店铺,主要营业服装之类的商品。有兴趣有需要的朋友请访问:xiiaohuoban.taobao.com可以直联系到本人!)接下来我们开始开发,在网站的根目录下新建一个PHP文件(code.php):?phpsession_start();//生成随机验证码$num=4;$str=getCode($num,0);$_SESSION[code]=$str;//1.创建图像,定义颜色$width=$num*20;$height=25;$im=imagecreatetruecolor($width,$height);//1.1字体颜色$color[]=imagecolorallocate($im,111,0,55);$color[]=imagecolorallocate($im,0,77,0);$color[]=imagecolorallocate($im,0,0,160);$color[]=imagecolorallocate($im,221,111,0);$color[]=imagecolorallocate($im,220,0,0);//1.2背景颜色$bgcolor=imagecolorallocate($im,240,240,240);//2.开始绘画,使用imagefill()、imagerectangle()函数给图像增加背景颜色与边框颜色imagefill($im,0,0,$bgcolor);imagerectangle($im,0,0,$width-1,$height-1,$color[rand(0,4)]);//2.1使用imagettftext()函数,将文本内容写入到图像中for($i=0;$i$num;$i++){imagettftext($im,14,rand(-20,20),5+(18*$i),20,$color[rand(0,4)],msyh.ttf,$str[$i]);}//2.2使用imagesetpixel()增加小于100个的干扰点for($i=0;$i100;$i++){//随机颜色$c=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));imagesetpixel($im,rand(0,$width),rand(0,$height),$c);}//2.3使用imageline()增加小于$num个数的干扰线for($i=0;$i$num;$i++){//随机颜色$c=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));imageline($im,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$c);}//3.输出图像,通过header()函数,告诉浏览器输出PNG图像格式,而不是文本形式header(Content-Type:image/png);imagepng($im);//4.销毁图像,释放内容imagedestroy($im);//5.自定义函数,获取随机验证码functiongetCode($m=4,$type=0){//随机验证码的内容$str=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;//各个类型验证码索引数组的结束位置,9的位置是纯数字结束位置,35的位置为小写字母的结束位置,62的位置为大写字母的结束位置//因位置是从0开始计算,所以最后的位置应减1.$t=array(9,35,strlen($str)-1);//从$str字符串中,生成随机验证码$c=;for($i=0;$i$m;$i++){$c.=$str[rand(0,$t[$type])];}//将生成的验证码赋值于SESSION会话,实现不同页面传递return$c;}项目完成到这一步的时候,随机验证码已经制作完成了!接下来我们来制作LOGIN登陆页面LOGIN.PHP。使用到的CSS、JS文件内容都在下面提供,使用到的图片:1:(login_button.jpg)2:(bg_title.jpg)3:(bg_user.jpg)?phpsession_start();if(isset($_POST[login_x])){$username=trim($_POST[username]);$password=md5($_POST[password]);if($_POST[code]!=$_SESSION[code]){echoscriptalert('验证码错误!');history.back();/script;exit;}//登陆有效期,如果选择是7天,则保留时间为604800秒,如果选择的是1个月,则保留时间为2592000秒。否则,保留为1小时if($_POST[radiobutton]==1){$time=time()+604800;}if($_POST[radiobutton]==2){$time=time()+2592000;}$sql=selectidfromweb_userwhereusername='$username'andpassword='$password';includedbconfig.inc.php;$result=$mysqli-query($sql);if($result-num_rows0){setCookie(username,$username,$time);setCookie(isLogin,1,$time);echoscriptwindow.location.href='index.php?lid=$_POST[radiobutton]';/script;}else{echoscriptalert('用户名或密码有误!');history.back();/script;exit;}}?!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//EN==Content-Typecontent=text/html;charset=gb2312/title用户登陆/titlelinkrel=stylesheettype=text/csshref=css/login.css/stylescripttype=text/javascriptsrc=js/checkinput.js/script/headbodydivclass=logindivid=tit用户登陆/divdivclass=login_bodyformaction=login.phpmethod=postonsubmit=returncheck(this)divid=username用户名:inputtype=textname=usernamesize=30class=login_id//divdivid=username密 码:inputname=passwordtype=passwordclass=login_idsize=30//divdivid=username验证码:inputname=codetype=textsize=8/ !—验证码的调用,鼠标经过时变成手型,点击自动更换不同的验证码--imgsrc=phpcode/code.phpname=imgalign=absmiddleonclick=this.src='phpcode/code.php?id='+Math.random()style=cursor:pointer//divdivid=username有效期:inputname=radiobuttontype=radiovalue=1checked=checked/7天inputtype=radioname=radiobuttonvalue=2/1个月/divdivid=login_buttoninputtype=imagesrc=images/login_button.jpgname=login//divdivid=login_buttonahref=forgetpass.php忘记密码?/a|ahref=reg.php免费注册/a/div/form/div/div/body/htmlLOGIN.PHP页面CSS文件内容LOGIN.CSS!--.login{width:330px;margin:0px;padding-top:50px;margin:auto;font-size:12px;}#tit{width:300px;height:34px;border:1px#cccsolid;margin:auto;line-height:34px;padding-left:30px;font-family:Geneva,Arial,Helvetica,sans-serif;color:#000066;font-size:15px;font-weight:bold;background:url(../images/bg_title.jpg)repeat-x;}.login_body{width:300px;height:auto;padding-left:30px;padding-top:10px;line-height:30px;border-left:1px#cccsolid;border-right:1px#cccsolid;border-bottom:1px#cccsolid;background:url(../images/bg_user.jpg)repeat;}.login_body#username{height:30px;line-height:30px;font-size:12px;margin-bottom:5px;}#login_button{font-size:12px;padding-left:49px;margin-bottom:5px;}.login_id{width:200px;}a:link{color:#000000;text-decoration:none;}a:hover{color: