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 URL编码解码函数代码
Mar 10 PHP
joomla内置的表单验证功能使用方法
Jun 11 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
php实现的一段简单概率相关代码
May 30 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
php防止sql注入代码实例
2013/12/18 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php简单复制文件的方法
2016/05/09 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
利用Python破解验证码实例详解
2016/12/08 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
python 获取计算机的网卡信息
2021/02/18 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
市场营销管理制度
2014/01/29 职场文书
教师业务培训方案
2014/05/01 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android