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


Posted in PHP onNovember 24, 2020

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

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

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

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

<div class="box">
  <h4>
    <a target="_blank" href="http://baijunyao.com/article/79" rel="external nofollow" >thinkphp整合系列之极验滑动验证码</a>
  </h4>
  <form id="geetest" action="{:U('Home/Index/geetest_submit_check')}" method="post">
    账号:<input type="text" name="username" value="admin">
    密码:<input type="text" name="password" value="123456">
    <input type="button" value="异步验证登录" onclick="check_verify()">
    <input type="submit" value="post提交登录">
    <div id="captcha"></div>
  </form>
</div>
<script src="/Public/statics/js/jquery-1.10.2.min.js"></script>
<script src="http://static.geetest.com/static/tools/gt.js"></script>
<script>
  var handler = function (captchaObj) {
    // 将验证码加到id为captcha的元素里
    captchaObj.appendTo("#captcha");
   };
  // 获取验证码
  $.get("{:U('Home/Index/geetest_show_verify')}", function(data) {
    // 使用initGeetest接口
    // 参数1:配置参数,与创建Geetest实例时接受的参数一致
    // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
    initGeetest({
      gt: data.gt,
      challenge: data.challenge,
      product: "float", // 产品形式
      offline: !data.success
    }, handler);
  },'json');
  // 检测验证码
  function check_verify(){
    // 组合验证需要用的数据
    var test=$('.geetest_challenge').val();
    var postData={
      geetest_challenge: $('.geetest_challenge').val(),
      geetest_validate: $('.geetest_validate').val(),
      geetest_seccode: $('.geetest_seccode').val()
    }
    // 验证是否通过
    $.post("{:U('Home/Index/geetest_ajax_check')}", postData, function(data) {
      if (data==1) {
        alert('验证成功');
      }else{
        alert('验证失败');
      }
    });
  }
</script>

HTML

四:验证函数

/Application/Common/Common/function.php

/**
 * geetest检测验证码
 */
function geetest_chcek_verify($data){
  $geetest_id=C('GEETEST_ID');
  $geetest_key=C('GEETEST_KEY');
  $geetest=new \Org\Xb\Geetest($geetest_id,$geetest_key);
  $user_id=$_SESSION['geetest']['user_id'];
  if ($_SESSION['geetest']['gtserver']==1) {
    $result=$geetest->success_validate($data['geetest_challenge'], $data['geetest_validate'], $data['geetest_seccode'], $user_id);
    if ($result) {
      return true;
    } else{
      return false;
    }
  }else{
    if ($geetest->fail_validate($data['geetest_challenge'],$data['geetest_validate'],$data['geetest_seccode'])) {
      return true;
    }else{
      return false;
    }
  }
}

PHP

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

五:php 生成验证码 并 验证

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

/**
 * geetest生成验证码
 */
public function geetest_show_verify(){
  $geetest_id=C('GEETEST_ID');
  $geetest_key=C('GEETEST_KEY');
  $geetest=new \Org\Xb\Geetest($geetest_id,$geetest_key);
  $user_id = "test";
  $status = $geetest->pre_process($user_id);
  $_SESSION['geetest']=array(
    'gtserver'=>$status,
    'user_id'=>$user_id
    );
  echo $geetest->get_response_str();
}
/**
 * geetest submit 提交验证
 */
public function geetest_submit_check(){
  $data=I('post.');
  if (geetest_chcek_verify($data)) {
    echo '验证成功';
  }else{
    echo '验证失败';
  }
}
/**
 * geetest ajax 验证
 */
public function geetest_ajax_check(){
  $data=I('post.');
  echo intval(geetest_chcek_verify($data));
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php for 循环语句使用方法详细说明
May 09 PHP
PHP中的错误处理、异常处理机制分析
May 07 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
Sep 16 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
php防止sql注入简单分析
Mar 18 PHP
php中file_exists函数使用详解
May 08 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
php图片添加水印例子
Jul 20 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 #PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 #PHP
php操作redis命令及代码实例大全
Nov 19 #PHP
PHP实现倒计时功能
Nov 16 #PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 #PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 #PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 #PHP
You might like
优化PHP代码技巧的小结
2013/06/02 PHP
php中执行系统命令的方法
2015/03/21 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
Python格式化输出%s和%d
2018/05/07 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
python中的for循环
2018/09/28 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
浅谈django channels 路由误导
2020/05/28 Python
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
总经理秘书工作职责
2013/12/26 职场文书
小学班级特色活动方案
2014/08/31 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
推广普通话的宣传语
2015/07/13 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
怎样写好工作计划
2019/04/10 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js