Ⅰ php+AJAX session 验证码跟生成的不一致!
因为你做了一个异步的操作。
1.验证码加载--显示图片--存入SESSION
2.页面加载--读取SESSION
这2步不是顺序进行的,所以你只能通过刷新取到上次的SESSION。
你可以参考http://gqy2468.javaeye.com/blog/690941这里的写法。
Ⅱ 如何用PHP生成验证码
PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有:
1、产生一张png的图片;
2、为图片设置背景色;
3、设置字体颜色和样式;
4、产生4位数的随机的验证码;
5、把产生的每个字符调整旋转角度和位置画到png图片上;
6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;
7、输出图片;
8、释放图片所占内存。
session_start();
getCode(4,60,20);
functiongetCode($num,$w,$h){
$code="";
for($i=0;$i<$num;$i++){
$code.=rand(0,9);
}
//4位验证码也可以用rand(1000,9999)直接生成
//将生成的验证码写入session,备验证时用
$_SESSION["helloweba_num"]=$code;
//创建图片,定义颜色值
header("Content-type:image/PNG");
$im=imagecreate($w,$h);
$black=imagecolorallocate($im,0,0,0);
$gray=imagecolorallocate($im,200,200,200);
$bgcolor=imagecolorallocate($im,255,255,255);
//填充背景
imagefill($im,0,0,$gray);
//画边框
imagerectangle($im,0,0,$w-1,$h-1,$black);
//随机绘制两条虚线,起干扰作用
$style=array($black,$black,$black,$black,$black,
$gray,$gray,$gray,$gray,$gray
);
imagesetstyle($im,$style);
$y1=rand(0,$h);
$y2=rand(0,$h);
$y3=rand(0,$h);
$y4=rand(0,$h);
imageline($im,0,$y1,$w,$y3,IMG_COLOR_STYLED);
imageline($im,0,$y2,$w,$y4,IMG_COLOR_STYLED);
//在画布上随机生成大量黑点,起干扰作用;
for($i=0;$i<80;$i++){
imagesetpixel($im,rand(0,$w),rand(0,$h),$black);
}
//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
$strx=rand(3,8);
for($i=0;$i<$num;$i++){
$strpos=rand(1,6);
imagestring($im,5,$strx,$strpos,substr($code,$i,1),$black);
$strx+=rand(8,12);
}
imagepng($im);//输出图片
imagedestroy($im);//释放图片所占内存
}
Ⅲ phpcmsPHPCMS v9 自定义表单添加验证码验证
要在PHPCMS v9系统中自定义表单添加验证码验证,首先需要在头部代码中加入以下代码:
pc_base::load_sys_class('form', '', 0);
这行代码的作用是加载系统中的表单类库。接下来,需要在表单生成代码中加入验证码的相关代码。具体实现步骤如下:
1. 在需要添加验证码的表单页面中引入验证码生成类库:
pc_base::load_sys_class('verify', '', 0);
2. 在表单生成代码中,添加生成验证码图片的代码:
$verify = new Verify();
$verify->entry();
3. 在表单提交处理代码中,增加验证用户输入的验证码是否正确:
if(!preg_match('/^\d{4}$/', $_POST['verifycode'])){
showmsg('验证码错误!', '', -1);
}
4. 确保在表单中添加验证码输入框和图片显示:
<img src="getCheckCodeUrl(); ?>" alt="验证码">
通过以上步骤,你就可以在PHPCMS v9的自定义表单中成功添加验证码验证功能,从而提高表单的安全性。