当前位置:首页 > CMS教程 > Thinkphp > 列表

Thinkphp极验滑动验证码实现步骤解析

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-01 09:10:57 浏览: 评论:0 

这篇文章主要介绍了Thinkphp极验滑动验证码实现步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。

对于建站的筒子们来说;垃圾广告真是让人深恶痛绝;

为了清净;搞个难以识别的验证码吧;又被用户各种吐槽;

直到后来出现了极验这个滑动的验证码;这真是一个体验好安全高的方案;

Thinkphp极验滑动验证码实现步骤解析

官网:http://www.geetest.com/ (此处应该有广告费)

示例项目:https://github.com/baijunyao/thinkphp-bjyadmin

一:注册获取key

注册;创建应用;获取key;

Thinkphp极验滑动验证码实现步骤解析

二:导入sdk

/ThinkPHP/Library/Org/Xb/Geetest.class.php

三:生成验证样式

/tpl/Home/Index/index.html

  1. <div class="box"
  2.   <h4> 
  3.     <a target="_blank" href="http://baijunyao.com/article/79" rel="external nofollow" >thinkphp整合系列之极验滑动验证码</a> 
  4.   </h4> 
  5.   <form id="geetest" action="{:U('Home/Index/geetest_submit_check')}" method="post"
  6.     账号:<input type="text" name="username" value="admin"
  7.     密码:<input type="text" name="password" value="123456"
  8.     <input type="button" value="异步验证登录" onclick="check_verify()"
  9.     <input type="submit" value="post提交登录"
  10.     <div id="captcha"></div> 
  11.   </form> 
  12. </div> 
  13. <script src="/Public/statics/js/jquery-1.10.2.min.js"></script> 
  14. <script src="http://static.geetest.com/static/tools/gt.js"></script> 
  15. <script> 
  16.   var handler = function (captchaObj) { 
  17.     // 将验证码加到id为captcha的元素里 
  18.     captchaObj.appendTo("#captcha"); 
  19.    }; 
  20.   // 获取验证码 
  21.   $.get("{:U('Home/Index/geetest_show_verify')}"function(data) { 
  22.     // 使用initGeetest接口 
  23.     // 参数1:配置参数,与创建Geetest实例时接受的参数一致 
  24.     // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件 
  25.     initGeetest({ 
  26.       gt: data.gt, 
  27.       challenge: data.challenge, 
  28.       product: "float"// 产品形式 
  29.       offline: !data.success 
  30.     }, handler); 
  31.   },'json'); 
  32.   // 检测验证码 
  33.   function check_verify(){ 
  34.     // 组合验证需要用的数据 
  35.     var test=$('.geetest_challenge').val(); 
  36.     var postData={ 
  37.       geetest_challenge: $('.geetest_challenge').val(), 
  38.       geetest_validate: $('.geetest_validate').val(), 
  39.       geetest_seccode: $('.geetest_seccode').val() 
  40.     } 
  41.     // 验证是否通过 
  42.     $.post("{:U('Home/Index/geetest_ajax_check')}", postData, function(data) { 
  43.       if (data==1) { 
  44.         alert('验证成功'); 
  45.       }else
  46.         alert('验证失败'); 
  47.       } 
  48.     }); 
  49.   } 
  50. </script> 

HTML

四:验证函数

/Application/Common/Common/function.php

  1. /** 
  2.  * geetest检测验证码 
  3.  */ 
  4. function geetest_chcek_verify($data){ 
  5.   $geetest_id=C('GEETEST_ID'); 
  6.   $geetest_key=C('GEETEST_KEY'); 
  7.   $geetest=new \Org\Xb\Geetest($geetest_id,$geetest_key); 
  8.   $user_id=$_SESSION['geetest']['user_id']; 
  9.   if ($_SESSION['geetest']['gtserver']==1) { 
  10.     $result=$geetest->success_validate($data['geetest_challenge'], $data['geetest_validate'], $data['geetest_seccode'], $user_id); 
  11.     if ($result) { 
  12.       return true; 
  13.     } else
  14.       return false; 
  15.     } 
  16.   }else
  17.     if ($geetest->fail_validate($data['geetest_challenge'],$data['geetest_validate'],$data['geetest_seccode'])) { 
  18.       return true; 
  19.     }else
  20.       return false; 
  21.     } 
  22.   } 

PHP

多谢 香蕉你个banana 童鞋的提醒;补上验证的函数;

五:php 生成验证码并验证

/Application/Home/Controller/IndexController.class.php

  1. /** 
  2.  * geetest生成验证码 
  3.  */ 
  4. public function geetest_show_verify(){ 
  5.   $geetest_id=C('GEETEST_ID'); 
  6.   $geetest_key=C('GEETEST_KEY'); 
  7.   $geetest=new \Org\Xb\Geetest($geetest_id,$geetest_key); 
  8.   $user_id = "test"
  9.   $status = $geetest->pre_process($user_id); 
  10.   $_SESSION['geetest']=array
  11.     'gtserver'=>$status
  12.     'user_id'=>$user_id 
  13.     ); 
  14.   echo $geetest->get_response_str(); 
  15. /** 
  16.  * geetest submit 提交验证 
  17.  */ 
  18. public function geetest_submit_check(){ 
  19.   $data=I('post.'); 
  20.   if (geetest_chcek_verify($data)) { 
  21.     echo '验证成功'
  22.   }else
  23.     echo '验证失败'
  24.   } 
  25. /** 
  26.  * geetest ajax 验证 
  27.  */ 
  28. public function geetest_ajax_check(){ 
  29.   $data=I('post.'); 
  30.   echo intval(geetest_chcek_verify($data)); 
  31. }

Tags: Thinkphp极验滑动验证码

分享到: