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 相关文章推荐
实用函数5
Nov 08 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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 七大优势分析
2009/06/23 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
2016/03/23 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
python使用post提交数据到远程url的方法
2015/04/29 Python
Python restful框架接口开发实现
2020/04/13 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
院药学专业个人求职信
2013/09/21 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript