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 相关文章推荐
APMServ使用说明
Oct 23 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
Jan 07 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
Feb 07 PHP
PHP多维数组排序array详解
Nov 21 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
js document.write()使用介绍
2014/02/21 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
支付宝小程序tabbar底部导航
2018/11/06 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
python通过ssh-powershell监控windows的方法
2015/06/02 Python
python得到电脑的开机时间方法
2018/10/15 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
Python实现井字棋小游戏
2020/03/09 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
历史学专业推荐信
2013/11/06 职场文书
党建工作经验交流材料
2014/05/25 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
检讨书怎么写
2015/05/07 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
2016年教代会开幕词
2016/03/04 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
vue router 动态路由清除方式
2022/05/25 Vue.js