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 文件上传类代码
Aug 06 PHP
php购物车实现方法
Jan 03 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP实现多关键字加亮功能
Oct 21 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
php json转换相关知识(小结)
Dec 21 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 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天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
举例详解Python中的split()函数的使用方法
2015/04/07 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
实例讲解Python3中abs()函数
2019/02/19 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
大学生毕业求职自荐书范文
2014/02/04 职场文书
活动总结报告范文
2014/05/04 职场文书
机械专业求职信
2014/05/25 职场文书
超市理货员岗位职责
2014/07/04 职场文书
食品安全演讲稿
2014/09/01 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
预备党员群众意见
2015/06/01 职场文书
永不妥协观后感
2015/06/10 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
golang生成vcf通讯录格式文件详情
2022/03/25 Golang