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 相关文章推荐
Zend引擎的发展 [15]
Oct 09 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
Jun 07 PHP
PHP耦合设计模式实例分析
Aug 08 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
PHP 超级全局变量相关总结
Jun 30 PHP
php实现简易计算器
Aug 28 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
PHP 字符串操作入门教程
2006/12/06 PHP
php简单提示框alert封装函数
2010/08/08 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP使用适合阅读的格式显示文件大小的方法
2015/03/05 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
python实现class对象转换成json/字典的方法
2016/03/11 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
python3.x实现base64加密和解密
2019/03/28 Python
python实现的config文件读写功能示例
2019/09/24 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
人力管理专业毕业生求职信
2014/02/27 职场文书
公积金具结保证书
2015/05/11 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers