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 相关文章推荐
ajax php 实现写入数据库
Sep 02 PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
php设计模式之委托模式
Feb 13 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 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
php学习之 数组声明
2011/06/09 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
js资料prototype 属性
2007/03/13 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
Python创建xml的方法
2015/03/10 Python
python获取外网ip地址的方法总结
2015/07/02 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python占位符输入方式实例
2019/05/27 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
考核工作实施方案
2014/03/30 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
初中学习计划书范文
2014/09/15 职场文书
个人债务授权委托书
2014/10/17 职场文书
2014年卫生工作总结
2014/11/27 职场文书
法务专员岗位职责
2015/02/14 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android