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 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
PHP如何编写易读的代码
Jul 10 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
项目中应用Redis+Php的场景
May 22 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
php之可变变量的实例详解
Sep 12 PHP
php array_chunk()函数用法与注意事项
Jul 12 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 PHP
laravel中Redis队列监听中断的分析
Sep 14 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
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
JS 实现完美include载入实现代码
2010/08/05 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python二分查找详解
2015/09/13 Python
python 数据的清理行为实例详解
2017/07/12 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
python编写Logistic逻辑回归
2020/12/30 Python
python 除法保留两位小数点的方法
2018/07/16 Python
python截取两个单词之间的内容方法
2018/12/25 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
数百万免费的图形资源:Freepik
2020/09/21 全球购物
党建工作整改措施
2014/10/28 职场文书
刑事辩护词范文
2015/05/21 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
浅析MySQL如何实现事务隔离
2021/06/26 MySQL