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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
sphinx增量索引的一个问题
Jun 14 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php笔记之:文章中图片处理的使用
Apr 26 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
Jun 29 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
深入分析PHP设计模式
Jun 15 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中全局变量global的使用演示代码
2011/05/18 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php实现微信模板消息推送
2018/03/30 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
python3安装crypto出错及解决方法
2019/07/30 Python
Python绘制热力图示例
2019/09/27 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python如何代码集体右移
2020/07/20 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
财务会计专业应届毕业生求职信
2013/10/18 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
物流合作计划书
2014/01/10 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js