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代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
PHP的变量总结 新手推荐
Apr 18 PHP
PHP无限分类(树形类)
Sep 28 PHP
PHP实现的简单日历类
Nov 29 PHP
PHP中Array相关函数简介
Jul 03 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
PHP微信分享开发详解
Jan 14 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 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改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
React创建组件的三种方式及其区别
2017/01/12 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
python改变日志(logging)存放位置的示例
2014/03/27 Python
python k-近邻算法实例分享
2014/06/11 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
python破解同事的压缩包密码
2020/10/14 Python
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
给老婆大人的检讨书
2014/02/24 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
德劲DE1108畅想
2021/04/22 无线电
Python破解极验滑动验证码详细步骤
2021/05/21 Python