php图片验证码校验问题,两个文件间使用session传值,有实例!
第一个文件:reg.php:
...
function submitForm(obj) {
var ret = true;
ret = validateAll(obj);
//1:怎么把第二个文件的产生的图片验证码值传到这里?
//2:这里加上怎么样的代码才能让验证码输入错误的时候,把ret置false?
//3:在这里进行验证码校验安全吗?有更好的办法吗?
if (ret == true) {
if (document.formRegStep1Main.Submit) {
document.formRegStep1Main.Submit.disabled = true;
}
}
return ret;
}
...
<form name="formRegStep1Main" action="register_input.php" method="post" onsubmit="return submitForm(this);">
<li>
<div class="Hint">校验码:</div>
<div class="Input">
<img src="http://localhost/123/check_img.php" id="checkCodeImg" align="absmiddle">
<input style="" class="Warning" name="n_checkcode" id="check_code" size="4" maxlength="4" tabindex="7"
type="text">
</div>
</div>
</li>
<p class="SubmitBox">
<input name="Submit" value="提交注册信息" tabindex="8" type="submit">
</p>
<div class="HackBox"></div>
</form>
...
第二个文件check_img.php:
<?php
//生成验证码图片
Header("Content-type: image/jpeg");
srand((double)microtime() * 1000000); //播下一个生成随机数字的种子,以方便下面随机数生成的使用
session_start(); //将随机数存入session中
$_SESSION['authnum'] = "";
$im = imagecreate(100, 20); //制定图片背景大小
$black = ImageColorAllocate($im, 0, 0, 0); //设定三种颜色
$white = ImageColorAllocate($im, 255, 255, 255);
$gray = ImageColorAllocate($im, 200, 200, 200);
imagefill($im, 0, 0, $gray); //采用区域填充法,设定(0,0)
while (($authnum = rand() % 10000) < 1000)
;
//将四位整数验证码绘入图片
$_SESSION['authnum'] = $authnum;
imagestring($im, 5, 50, 3, $authnum, $black);
// 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体
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);
}
imagejpeg($im);
ImageDestroy($im);
?>