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 相关文章推荐
E路文章系统PHP
Dec 11 PHP
一个简单的PHP&MYSQL留言板源码
Jul 19 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
php实现网页端验证码功能
Jul 11 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 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
2006/10/09 PHP
推荐一篇入门级的Class文章
2007/03/19 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
thinkphp模板用法和内容输出实例
2014/11/28 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
vue使用drag与drop实现拖拽的示例代码
2017/09/07 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python得到windows自启动列表的方法
2018/10/14 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
简单了解python变量的作用域
2019/07/30 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python生成随机红包的实例写法
2019/09/02 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
keras 多任务多loss实例
2020/06/22 Python
python 实现端口扫描工具
2020/12/18 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
openstack中的rpc远程调用的方法
2021/07/09 Python