PHP验证码和Ajax验证
验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录,论坛恶意灌水等。
PHP生成验证码图片
PHP生成验证码原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码存在Session中。PHp生成验证码的大致流程有:
- 生成一张图片
- 为图片设置背景颜色
- 设置字体颜色和样式
- 产生随机的验证码
- 把产生的验证码的每个字符处理后画到图片上
- 加入噪点和干扰线
- 输出图片
- 释放图片所占内存
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验证相关推荐
- PHP生成各种验证码和Ajax验证
转载链接:http://www.helloweba.com/view-blog-191.html 验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录.论坛恶意灌水等.本文将通 ...
- php ajax 验证码,PHP验证码和Ajax验证
验证码在WEB应用中非常重要,通常用来防止用户恶意提交表单,如恶意注册和登录,论坛恶意灌水等. PHP生成验证码图片 PHP生成验证码原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码存在S ...
- ajax实现php验证码验证码,PHP验证码之Ajax验证实现方法_PHP教程
session_start(); //设置: 你可以在这里修改验证码图片的参数 $image_width = 120; $image_height = 40; $characters_on_image ...
- 拖动图形验证码(极验验证)
1.地址 http://www.geetest.com/ 申请账号 2.样式 3. 前端 <div id="captcha"><div id="lo ...
- 【愚公系列】2022年12月 .NET CORE工具案例-滑块验证码和拼图验证功能实现
文章目录 前言 1.滑块验证码的定义 2.滑块验证码的安全性分析 3.滑块验证码的第三方服务 一.滑动验证码和拼图验证功能实现 1.逻辑分析 2.新建项目 3.配置缓存 4.配置跨域 5.后端源码 6 ...
- Flask项目实战——7—(Redis数据库存储验证码信息、验证登录界面的表单信息、注册功能实现、登录实现)
推荐一个API平台:聚合数据 1.Redis数据库存储验证码信息 保存手机验证码到Redis数据库 公有视图文件:apps/common/views.py # -*- encoding: utf-8 ...
- 带头像、邮箱提醒、ajax验证的form表单
页面是简单用个table拼出来的.包含以下功能: 1.表单验证 2.邮箱提醒 3.更换头像 4.ajax验证(没有生成验证码的jar包,就只用身份证写了个ajax验证展示,没有具体去验身份证) 在使用 ...
- 利用ajax验证用户名,3.6.2 利用Ajax验证注册用户名(1)
3.6.2 利用Ajax验证注册用户名(1) 由于注册的用户比较多,如果能在客户端还没提交注册表单之前验证用户名是否可用,如果不可用则禁止提交,这样将大大减少网络流量和服务器负载.本节将介绍如何利用 ...
- 短信验证码、图形验证码、邮件验证的自动化测试
短信验证码.图形验证码.邮件验证问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题.设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试 ...
最新文章
- 【JOI2017春季合宿】Port Facility
- 易语言 精易模块 操作json数据
- 有关计算机代码的游戏,七灯游戏是一款经典的益智类游戏。游戏中,有七盏灯排成一圈,如图a所示,初始时灯的开关状态随机生成,操作其中某一盏灯,则可以切换该灯的“开/关”状态,同时,这盏灯-组卷网...
- Xcode5 使用gitHub上库的SSH地址建立Repository,以及如何通过Xcode把代码传到GitHub
- 前端面试常考的手写代码不是背出来的!
- c语言程序设计 实验十一,C语言实验十一 结构体程序设计(二)
- 教你如何在 Pycharm 中制作自己的爬虫代码模板
- 掘金网无极ip代理软件IOS版如何下载安装?
- 新版FMEA软件结构树图 免费申请试用(FMEAHunter)
- 医疗器材行业如何利用三类医疗器械进销存软件
- CVPR2020——D3VO论文阅读
- 初探强化学习(11)Dyna类型的强化学习
- IP-Guard如何禁止运行U盘程序
- 使用线程持续产生随机数
- VulnHub-XXE
- 小身躯,大志向,宇通智能巴士有哪些黑科技
- 经典算法题-球和篮子
- 搭建ngrok服务器
- 如何将二维码分解成链接?二维码解码在线怎么操作?
- liferay6.2 mysql_liferay6.2 集成CKEditor和ckfinder
热门文章
- pyinstaller打包生成的exe文件并使用python终止后台的exe程序运行
- R语言match函数对象之间的匹配实战
- 通过mrtrix3进行概率纤维追踪+核磁共振影像数据处理
- 基于模型(Model-based)进行特征选择(feature selection)并可视化特征重要性(feature importance)
- GLM+广义线性模型
- 使用LDA(Linear Discriminant Analysis)进行降维(dimention reduction)详解和实战
- KDT 对比 DDT 小栗子
- 数字图像处理6:配准与掩膜
- java whois_Java如何实现简单的whois查询
- tf.keras.layers.MaxPool2D 最大池化层 示例