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 相关文章推荐
随时给自己贴的图片加文字的php代码
Mar 08 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
PHP+MySQL投票系统的设计和实现分享
Sep 23 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 PHP
PHP导航下拉菜单的实现如此简单
Sep 22 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 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序列化操作方法分析
2016/09/28 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
python中__call__内置函数用法实例
2015/06/04 Python
python负载均衡的简单实现方法
2018/02/04 Python
python中必要的名词解释
2019/11/20 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
怎样创建、运行java程序
2014/08/01 面试题
物联网工程专业推荐信
2014/09/08 职场文书
股指期货心得体会
2014/09/10 职场文书
体育教师个人总结
2015/02/09 职场文书
会计工作能力自我评价
2015/03/05 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
Pandas数据类型之category的用法
2021/06/28 Python