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 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
Aug 08 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
php学习笔记之基础知识
Nov 08 PHP
PHP中预定义的6种接口介绍
May 12 PHP
CI框架常用方法小结
May 17 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
Laravel服务容器绑定的几种方法总结
Jun 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
CI(CodeIgniter)框架介绍
2014/06/09 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
js一维数组、多维数组和对象的混合使用方法
2016/04/03 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
JS实现简易日历效果
2021/01/25 Javascript
Python数据结构之翻转链表
2017/02/25 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
python3使用腾讯企业邮箱发送邮件的实例
2019/06/28 Python
浅谈django channels 路由误导
2020/05/28 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
亲子活动总结
2014/04/26 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
解除施工合同协议书
2014/10/17 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
python开发人人对战的五子棋小游戏
2022/05/02 Python
python区块链实现简版工作量证明
2022/05/25 Python
使用CSS自定义属性实现骨架屏效果
2022/06/21 HTML / CSS