PHP+Ajax实现验证码的实时验证


Posted in PHP onJuly 20, 2016

PHP的图像处理功能强大,做一张验证码图片也是非常简单的,但是,在实现实时验证时,确遇到了一个难题:
我用nat123对我的电脑上的网站进行端口映射,实现了在外网访问,本来是采用cookie的方式用js对验证码进行验证,但是经检验发现nat123虽然使我的网站可以通过一个自定义的网址进行访问,但是产生验证码的php文件在网络上的位置竟然和其它页面不在一个域,经查询得知,因为输出图片的缘故,被作为缓存文件映射在了某个文件夹内,所以——其他页面在我的网址下,产生验证码的页面又在另一个网址里,所以它们的cookie不能共用,不管怎么设置path和domain都不管用,于是我只好采用session存储验证码了,因为session存在于服务器,也就是在我本地网址中都可以存取。
接下来是重头戏,之前只是粗略了解过ajax,对于它的用途和特性还是知道的,获取后台来的数据这个比较泛泛的概念具体的使用起来就不知道如何下手了。
首先,我分析了个例题的代码,用途是获取后台的一个文本文件的内容:

function getHTTPObject(){
  if(typedef XMLHttpRequest == "undefined")
    XMLHttpRequest = function(){
      try{ return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
      catch(e){}
      try{ return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
      catch(e){}
      try{ return new ActiveXObject("Msxml2.XMLHTTP");}
      catch(e){}
      return false;
    }
    return new XMLHttpRequest();
}
function getNewContent(){
  var request = getHTTPObject();
  if(request){
    request.open("GET","TEST.txt",true);
    request.onreadystateschange = function(){
      alert(request.responseText);
    }
  }else{
  alert("no support XMLHttpRequest!");
  }
}

其中的关键是:

request.open("GET","TEST.txt",true);
    request.onreadystateschange =function(){
      alert(request.responseText);
    }

这三句指定了GET请求发向的页面和XMLHttpRequest对象送回响应的时候触发的处理函数,而数据正是通过request.responseText获取的。

--------------------------------------------------------------------------------

可是我要获取的数据是后台php文件产生的验证码,怎么让后台发送验证码?
无论GET还是POST方式都是把数据发送到后台,ajax从哪里取回后台的数据呢?
百思不得其解之下,我又查询了另一本资料,找到一个示例:
其中XMLHttpRequest对象送回响应的处理语句是:

request.onreadystateschange=alertContent;
function alertContent(){
...
  alert(request.responseText);
...
}

请求的文件为check.php
其中有这么几句条件输出:

if($info){
  echo "你的用户名可以使用";
}else {
  echo "该用户名已被注册";
}

而运行实例效果图中赫然在静态页面弹出消息框,内容如check.php页面的输出!!!
也就是说ajax能请求到一个php页面的输出内容,于是,接下来简单多了,因为图片也是验证码页面的输出,所以不能直接ajax验证码页面,不然就把图片的数据也获取了。
新建一个php页面:

sission_start();
$code="";
if(!empty($_session['check']))$code=$_session['check'];
echo $code;

再在前端用ajax向这个页面GET一个请求,就能用request.responseText获取验证码了。
然后把验证过程封装在一定条件触发的函数里,即可实时验证。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一个PHP模板,主要想体现一下思路
Dec 25 PHP
PHP 判断常量,变量和函数是否存在
Apr 26 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
php实现算术验证码功能
Dec 05 PHP
php pdo连接数据库操作示例
Nov 18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
php+ajax注册实时验证功能
Jul 20 #PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 #PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
Jul 20 #PHP
php+flash+jQuery多图片上传源码分享
Jul 27 #PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 #PHP
值得分享的php+ajax实时聊天室
Jul 20 #PHP
php验证身份证号码正确性的函数
Jul 20 #PHP
You might like
discuz 首页四格:最新话题+最新回复+热门话题+精华文章插件
2007/08/19 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
FleaPHP的安全设置方法
2008/09/15 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
详解php实现页面静态化原理
2017/06/21 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
python实现统计代码行数的方法
2015/05/22 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
三维科技面试题
2013/07/27 面试题
大学生创业计划书的范文
2014/01/07 职场文书
函授生自我鉴定
2014/03/25 职场文书
党员大会主持词
2014/04/02 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
暑期培训心得体会
2014/09/02 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
邀请书模板
2015/02/02 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python