php图片验证码校验问题,两个文件间使用session传值,有实例!

neverdead 2006-10-12 12:23:54
第一个文件: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);
?>
...全文
367 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
neverdead 2006-10-16
  • 打赏
  • 举报
回复
一知半解
an9ryfr09 2006-10-12
  • 打赏
  • 举报
回复
1. 直接在js区域里面<?php echo $_SESSION['authnum']?>就可以取到验证码的值,因为在图片生成的时候,另一个页面把产生的随机序列放在了这个session中了。然后用这个与它输入的字符串与这个session进行比较。

2. if(<?php echo $_SESSION['authnum']?> != obj.n_checkcode.value ){
alert("验证码输入错误!");
return false;
}

3. 最好不要或只单单用js来检测验证码是否正确。对方禁掉js,你这就没用了,至少在服务器端再做一次检测。
iasky 2006-10-12
  • 打赏
  • 举报
回复
不要把验证码放在js中巴,这样在页面加载后就可以看到了

还是在提交后来和$_SESSION['authnum']对比看验证码对不对

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧