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 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
dedecms函数分享之获取某一栏目所有子栏目
May 19 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
PHP可变变量学习小结
Nov 29 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 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中使用Oracle数据库(1)
2006/10/09 PHP
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
PHP中的事务使用实例
2015/05/26 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
2016/07/06 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
在Python中使用base64模块处理字符编码的教程
2015/04/28 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
python实现文件的备份流程详解
2019/06/18 Python
pytorch 共享参数的示例
2019/08/17 Python
全球最大的游戏市场:G2A
2018/07/05 全球购物
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
六一儿童节主持词
2014/03/21 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
职代会闭幕词
2015/01/28 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
节约用电倡议书
2015/04/28 职场文书
开业典礼致辞
2015/07/29 职场文书
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫