注册模块(1)的改进:认证代码存储在会话中。

需要修改的几个文档:

(1)register.php产生随机数和加密的值

改变register.html到register.php,和开放的会议;

在register.js生成随机数的函数编写的register.php,和PHP的方法。



的…
< PHP

随机数生成函数
功能showval(){

= $;
($ i = 0;$ i < 4;$ + +){

$ TMP =兰特(15);
如果($ 9){
开关($ TMP){
案例(10):
为民= A;
打破;
案例(11):
为民= B;
打破;
案例(12):
为民= C;
打破;
案例(13):
美元=;
打破;
案例(14):
为民= e;
打破;
案例(15):
为民= F;
打破;
}
{ { { }
美元= TMP;
}
}
返回$;
}

随机数生成
mdnum美元= MD5(showval());

会话中加密后随机数和随机数
_session美元{ 'num} = showval();
_session美元{ 'mdnum} = $ mdnum;
>



样式=光标:指针标题验证代码alt验证代码>







生成的4位验证码和MD5加密验证码存储在会话中,而客户端验证码的SRC属性参数是加密值,因此客户端不会有四位验证码。

(2)valcode.php写入随机数分为图形

在register.php,对验证码图片地址是

>

因此,在valcode.php,有必要进行相应的修改,并修改原:

/ /直接传输客户端的输入值$民= _get美元'num'} {;

修改:


session_start();
页眉(内容类型:图像);

4位随机数生成 / /会话和随机数加密MS5
如果(isset($ _session { 'mdnum ' }){ } _session美元'mdnum!){

mdnum美元美元'mdnum_session { } =;

如果(isset($ _get { 'num ' }){ } _get美元'num!){

当注册页面通过随机数在相等时加密数字和会话时
如果($ _get { 'num} = = $ mdnum){

如果(isset($ _session { 'num ' }){ } _session美元'num!=)

存储在会话中的$ 4位随机数
Num =美元美元_session { 'num};
}
}
}


也就是说,客户端图像传输的加密参数与存储在会话中的加密值相同,然后将存储在会话中的4位验证代码写入图形。

对于valcode.php完整代码:


< PHP

session_start();
页眉(内容类型:图像);

4位随机数生成 / /会话和随机数加密MS5
如果(isset($ _session { 'mdnum ' }){ } _session美元'mdnum!){

mdnum美元美元'mdnum_session { } =;

如果(isset($ _get { 'num ' }){ } _get美元'num!){

当注册页面通过随机数在相等时加密数字和会话时
如果($ _get { 'num} = = $ mdnum){

如果(isset($ _session { 'num ' }){ } _session美元'num!=)

存储在会话中的$ 4位随机数
Num =美元美元_session { 'num};
}
}
}

imagewidth = 150美元;
ImageHeight = 54美元;

创建图像
numimage美元=画面欣赏(imagewidth美元,$ ImageHeight);

用于图像分发颜色
imagecolorallocate(numimage美元,240240240);

字体大小
font_size = 33美元;

字体名称
$fontname ='arial.ttf';

生成的图片文本
为($我= 0;$我< strlen($num);$ i++){

获取文本/ x坐标的左上角
X元= mt_rand(20,20)+ $ imagewidth * $我/ 5;

获取y坐标的左上角的文本
Y元= mt_rand(40,$ ImageHeight);

对于文本颜色分布
颜色= imagecolorallocate美元(美元numimage,mt_rand(0150),mt_rand(0150),mt_rand(0150));

写入文本
imagettftext(numimage美元,font_size美元,0,X,Y元,美元美元美元的颜色,大小,数量{我});
}

代码生成干扰
($ i = 0;$ i < 2200;$ + +){
randcolor = imagecolorallocate美元(美元numimage,伦德(200255),伦德(200255),伦德(200255));
imagesetpixel(numimage美元,伦德()伦德()% % 180,90,randcolor美元);
}

输出画面
imagepng($ numimage);
销毁一图像($ numimage);

>


register.js验证

验证的一部分改为使用ajax验证,通过输入4位验证码的chkyzm.php文件,比较4位验证码存储在会话。

当画面刷新,4位验证码是再生和书面与加密认证编码会话。重码生成验证码是写在refresh.php,使用AJAX的register.js要求产生4位加密和验证码验证码,和加密的代码值的jQuery图像src属性参数、会话和valcode.php与参数生成4位代码的图片

register.js验证码的代码部分:


代码按钮
$(# refpic)。Hover(function(){)

$(这)。Attr(src
}函数(){()

$(这)。Attr(src
})。Mousedown(function(){)

$(这)。Attr(src
})。Mouseup(function(){)

$(这)。Attr(src
});


刷新代码
功能postyzm(){

美元。

$(# yzmpic)。Attr(src
})
}

$(# yzmpic)。Click(function(){)

Postyzm();
});

$(#改变)。Click(function(){)

Postyzm();
});

检查/验证码
功能yzmchk(){

美元。后(, / / chkyzm PHP ..。

传输数据
YZM:$(# YZM)。瓦迩()
},功能(数据,textstatus){

如果(数据= 0){

成功($(# yzmchk ),);
yzmval =真;
否则如果(数据=1){

无功noticemsg =验证码不能为空;
通知($(# yzmchk ),noticemsg);
其他{ }

无功errormsg =请输入正确的验证码;
误差($(# yzmchk ),errormsg);
}
});

}

模糊事件代码
$(# YZM)。焦点(函数(){)

无功noticemsg = '无乱;
通知($(# yzmchk ),noticemsg);
}Click(函数(){)

无功noticemsg = '无乱;
通知($(yzmdchk ),noticemsg);
})。Keydown(function(){)

如果(的情况下= = 13){

芝加哥
Yzmchk();
}
})。Keyup(function(){)

如果(的情况下= = 13){

提交
formsub();
}
}Blur(函数(){)

Yzmchk();
});


chkyzm.php


< PHP
session_start();
标题(字符集= UTF-8);

如果(isset($ _post { 'yzm ' }){ } _post美元'yzm!){

YZM = { 'yzm美元美元_post};

如果(isset($ _session { 'num ' }){ } _session美元'num!){

当输入验证码和会话保存的数字一致时
如果(strtolower($ YZM)= = $ _session { 'num ' }){

输入右键
$ = 0;
其他{ }

输入错误
$ = 2;
}
}
其他{ }

无输入
$ = 1;
}
回波$状态;
>


refresh.php


< PHP

session_start();

生成的验证码
功能showval(){

= $;
($ i = 0;$ i < 4;$ + +){

$ TMP =兰特(15);
如果($ 9){
开关($ TMP){
案例(10):
为民= A;
打破;
案例(11):
为民= B;
打破;
案例(12):
为民= C;
打破;
案例(13):
美元=;
打破;
案例(14):
为民= e;
打破;
案例(15):
为民= F;
打破;
}
{ { { }
美元= TMP;
}
}
返回$;
}

_session美元{ 'num} = showval();
_session美元{ 'mdnum} = MD5(showval());

echo $ _session { 'mdnum};


显示的效果如下:





总结:

5步:4验证码写入会话生成的图像,对客户端的认证码加密参数的使用图片,以比较在4验证码会话输入字符,刷新图片生成4位代码并存储在会话,重新加密验证码图片的src参数

使用可以表示为:



(待续)