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.MVC的模板标签系统(二)
Sep 05 PHP
一个用php3编写的简单计数器
Oct 09 PHP
谈谈新手如何学习PHP
Dec 14 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
php生成扇形比例图实例
Nov 06 PHP
php自定义hash函数实例
May 05 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
Laravel统一错误处理为JSON的方法介绍
Oct 18 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
制作美丽的拉花
2021/03/03 冲泡冲煮
在数据量大(超过10万)的情况下
2007/01/15 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
Python判断字符串与大小写转换
2015/06/08 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
Python学习之os模块及用法
2020/06/03 Python
Python logging模块原理解析及应用
2020/08/13 Python
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
学校岗位设置方案
2014/01/16 职场文书
爱心捐款倡议书
2014/04/14 职场文书
暑期教师培训方案
2014/06/07 职场文书
锅炉工岗位职责
2015/02/13 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python