验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录,论坛恶意灌水等。

PHP生成验证码图片

PHP生成验证码原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码存在Session中。PHp生成验证码的大致流程有:

  1. 生成一张图片
  2. 为图片设置背景颜色
  3. 设置字体颜色和样式
  4. 产生随机的验证码
  5. 把产生的验证码的每个字符处理后画到图片上
  6. 加入噪点和干扰线
  7. 输出图片
  8. 释放图片所占内存
 session_start();getCode(4,60,20);function getCode($len,$width,$height){$code = '';for($i=0;$i<$num;$i++){$code .= rand(0,9);}//将生成的验证码写入session,验证时用$_SESSION['chkcode'] = $code;//创建图片,定义颜色值header("Content-type:image/png");$im = imagecreate($width,$height);$black = imagecolorallocate($im,0,0,0);$gery = imagecolorallocate($im,200,200,200);$bgcolor = imagecolorallocate($im,255,255,255);//填充背景imagefill($im,0,0,$grey);//画边框imagereactangle($im,0,0,$width-1,$height-1,$black);//随机回执两条虚线,起干扰作用$style = array($black,$black,$black,$black,$black,$grey,$grey,$grey,$grey,$grey);imagesetstyle($im,$style);$y1 = rand(0,$height);$y2 = rand(0,$height);$y3 = rand(0,$height);$y4 = rand(0,$height);imageline($im,0,$y1,$width,$y3,IMG_COLOR_STYLED);imageline($im,0,$y2,$width,$y4,IMG_COLOR_STYLED);//在画布上随机生成大量黑点,起干扰作用for($i=0;$i<80;$i++){imagesetpixel($im,rand(0,$width),rand(0,$height),$black);      }//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成$strx = rand(3,8);for($i=0;$i<$num;$i++){$strpos = rand(1,6);imagestring($im,6,$strx,%strpos,%substr($code,$i,1),$black);$strx +=rand(8,12);}imagepng($im);//输出图片imagedestory($im);//释放图片所占内存
}

将上述代码保存为code_num.php,以便调用。

Ajax刷新和验证

验证码生成后,我们要在实际的项目中应用,通常我们使用ajax可以实现点击验证码时刷新生成新的验证码(有时生成的验证码肉眼很难识别),即“看不清换一张”。填写验证码后,还需要验证所填验证码是否正确,验证的过程是要后台程序来完成,但是我们也可以通过ajax来实现无刷新验证。

新建一个前段页面index.html,载入jquery,同时在body中加入验证码表单元素:

<p>验证码:<input type="text' id="code_num" name="code_num" />
<img src="code_num.php" id="getcode_num" title="看不清,点击换一张" /></p>
<p><input type="button" id="chk_num" value="提交" /> </p>
html代码中,<img src="code_num.php"即调用了生成的验证码,当点击验证码时,刷新生成新的验证码:
$(function(){//数字验证$("$getcode_num").click(function(){$this.attr("src","code_num.php?"+Math.random());});...
});
刷新验证码,其实就是重新请求了验证码生成程序,这里要注意的是调用code_num.php时要带上随机参数防止缓存。接下来填写好验证码之后,点“提交”按钮,通过$.post(),前端向后台chk_code.php发送ajax请求。

$(function(){...$("#chk_num").click(function(){var code_num = $("#code_num").val();$.post("chk_code.php?act=num",{code:code_num},function(msg){if(msg==1){alert("验证码正确!");}else{alert("验证码错误!");}});});
});

后台chk_code.php验证:
session_start();
$code = trim($_POST['code']);
if($code==$_SESSION['chkcode']){echo '1';
}
后台根据提交的验证码与保存在session中的验证码比对,完成验证。

PHP验证码和Ajax验证相关推荐

  1. PHP生成各种验证码和Ajax验证

    转载链接:http://www.helloweba.com/view-blog-191.html 验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录.论坛恶意灌水等.本文将通 ...

  2. php ajax 验证码,PHP验证码和Ajax验证

    验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录,论坛恶意灌水等. PHP生成验证码图片 PHP生成验证码原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码存在S ...

  3. ajax实现php验证码验证码,PHP验证码之Ajax验证实现方法_PHP教程

    session_start(); //设置: 你可以在这里修改验证码图片的参数 $image_width = 120; $image_height = 40; $characters_on_image ...

  4. 拖动图形验证码(极验验证)

    1.地址 http://www.geetest.com/   申请账号 2.样式 3. 前端 <div id="captcha"><div id="lo ...

  5. 【愚公系列】2022年12月 .NET CORE工具案例-滑块验证码和拼图验证功能实现

    文章目录 前言 1.滑块验证码的定义 2.滑块验证码的安全性分析 3.滑块验证码的第三方服务 一.滑动验证码和拼图验证功能实现 1.逻辑分析 2.新建项目 3.配置缓存 4.配置跨域 5.后端源码 6 ...

  6. Flask项目实战——7—(Redis数据库存储验证码信息、验证登录界面的表单信息、注册功能实现、登录实现)

    推荐一个API平台:聚合数据 1.Redis数据库存储验证码信息 保存手机验证码到Redis数据库 公有视图文件:apps/common/views.py # -*- encoding: utf-8 ...

  7. 带头像、邮箱提醒、ajax验证的form表单

    页面是简单用个table拼出来的.包含以下功能: 1.表单验证 2.邮箱提醒 3.更换头像 4.ajax验证(没有生成验证码的jar包,就只用身份证写了个ajax验证展示,没有具体去验身份证) 在使用 ...

  8. 利用ajax验证用户名,3.6.2 利用Ajax验证注册用户名(1)

    3.6.2  利用Ajax验证注册用户名(1) 由于注册的用户比较多,如果能在客户端还没提交注册表单之前验证用户名是否可用,如果不可用则禁止提交,这样将大大减少网络流量和服务器负载.本节将介绍如何利用 ...

  9. 短信验证码、图形验证码、邮件验证的自动化测试

    短信验证码.图形验证码.邮件验证问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题.设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试 ...

最新文章

  1. 【JOI2017春季合宿】Port Facility
  2. 易语言 精易模块 操作json数据
  3. 有关计算机代码的游戏,七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯-组卷网...
  4. Xcode5 使用gitHub上库的SSH地址建立Repository,以及如何通过Xcode把代码传到GitHub
  5. 前端面试常考的手写代码不是背出来的!
  6. c语言程序设计 实验十一,C语言实验十一 结构体程序设计(二)
  7. 教你如何在 Pycharm 中制作自己的爬虫代码模板
  8. 掘金网无极ip代理软件IOS版如何下载安装?
  9. 新版FMEA软件结构树图 免费申请试用(FMEAHunter)
  10. 医疗器材行业如何利用三类医疗器械进销存软件
  11. CVPR2020——D3VO论文阅读
  12. 初探强化学习(11)Dyna类型的强化学习
  13. IP-Guard如何禁止运行U盘程序
  14. 使用线程持续产生随机数
  15. VulnHub-XXE
  16. 小身躯,大志向,宇通智能巴士有哪些黑科技
  17. 经典算法题-球和篮子
  18. 搭建ngrok服务器
  19. 如何将二维码分解成链接?二维码解码在线怎么操作?
  20. liferay6.2 mysql_liferay6.2 集成CKEditor和ckfinder

热门文章

  1. pyinstaller打包生成的exe文件并使用python终止后台的exe程序运行
  2. R语言match函数对象之间的匹配实战
  3. 通过mrtrix3进行概率纤维追踪+核磁共振影像数据处理
  4. 基于模型(Model-based)进行特征选择(feature selection)并可视化特征重要性(feature importance)
  5. GLM+广义线性模型
  6. 使用LDA(Linear Discriminant Analysis)进行降维(dimention reduction)详解和实战
  7. KDT 对比 DDT 小栗子
  8. 数字图像处理6:配准与掩膜
  9. java whois_Java如何实现简单的whois查询
  10. tf.keras.layers.MaxPool2D 最大池化层 示例