码农网技术教程资源分享平台:PHP、前端、Go、Python等视频教程大全

码农网技术教程资源分享平台:PHP、前端、Go、Python等视频教程大全

码农网是一个技术教程资源分享平台。它收集了多种类型的视频教程,包括 php 视频教程、前端各种视频教程、接口 API、微信公众号视频教程、支付宝视频教程,还有 go 语言、python 等视频教程。这些教程以链接加提取码的方式分享给大家。

每天通过公众号来阅读文章并进行学习,目前是最为便捷的方式。在闲暇时间里,利用 5 分钟读读技术文章,能够丰富自身知识。当然,学习存在多种方法,并非仅仅依靠公众号来学习,你可以到网上去查找更多的教程、学习文档、技术书本以及视频教程!每个人都有自己的爱好。

视频教程推荐

ThinkPHP5.0正式版第二季:实战开发企业站

金币充值规则与优惠

文章正文

现在许多网站,像淘宝、京东等,都开始采用极验拖动验证码来实现登录。这种方式相较于传统验证码方式,能带来更好的体验,能够减少用户输入的错误,并且也能起到防盗刷的作用。如今,很多极验是第三方的,并且很多都是收费的。在此主要为大家介绍 thinkphp 整合系列中的极验滑动验证码 geetest,其官网为:

具体如下:

一:注册获取key

注册;创建应用;获取key;

二:导入sdk

ThinkPHP 库中的 Org 目录下的 Xb 目录中有一个名为 GeetestLip.class.php 的文件(此 GeetestLip.class.php 是我重新命名的 geetest 类文件,原本名为 class.geetestlib.php)

这里涉及到 thinkphp 引入第三方类的情况,我将第三方类放置到 Org/Util/Xb 之下了,并且给该类文件添加了命名空间,不然在实例化类的时候找不到文件。

三:生成验证样式

在 admin 目录下的 view 文件夹中,有一个名为 public 的文件,其中包含 cdtsh_log_smfyws.php 这个文件。


<html>
<head>
  <meta charset="GBK" />
  <title>网站管理系统后台title>
  <script language="javascript" type="text/javascript" src="__JS__/jquery.js">script>
  <link rel="stylesheet" href="CSS 样式表文件 /jquery.validator.css">
  <script type="text/javascript" src="__JS__/jquery.validator.js">script>
  <script type="text/javascript" src="__JS__/zh_CN.js">script>
  <link href=“CSS 位于/admin_login.css?v20130227 处” rel="stylesheet" />
  <script>
    $(document).ready(function(){
      var verifyimg = $(".verifyimg").attr("src");
      $(".reloadverify").click(function(){
        if( verifyimg.indexOf('?')>0){
          $(".verifyimg").attr("src", verifyimg+'&random='+Math.random());
        }else{
          $(".verifyimg").attr("src", verifyimg.replace(/\?.*$/,'')+'?'+Math.random());
        }
      });
    });
  
script>
head>
<body>
<div class="wrap">
  <h1><a href="javascript:;" style=高度为 116 像素,宽度为 250 像素。>后台管理中心a>h1>
  <form method="post" action=Admin/Public/cdtsh_log_smfyws 这个内容被使用或提及了。>
    <div class="login">
      <ul>
        <li>
          <input class="input" id="username" name="username"type="text" title="用户名" data-rule="required;username" placeholder="用户名" />
          <span class="msg-box n-right" style=位置是绝对的;左边的位置是 248 像素;上边的位置是 12 像素。 for="username">span>
        li>
        <li>
          <input class="input" name="password" type="password" title="密码" data-rule="required;password" placeholder="密码"/>
          <span class="msg-box n-right" style=它的顶部是 12 像素。 for="password">span>
        li>
        <li>
          <input class="input" id="verify" name="verify" type="text" style="width:130px;" title="密码" data-ok=" " placeholder="验证码" data-tip="输入验证码!" title="验证码" data-rule=需要;文本;远程[{$U('Admin/Public/check_verify')}] />
          <div class="yanzhengma_box" id="verifyshow">  <img class="verifyimg reloadverify" style=" cursor: pointer;" align="right" src="{:U('public/verify')}" title="点击刷新"> div>
          <span class="msg-box n-right" style="position:absolute;left: 248px; top: 12px;" for="verify">span>
        li>
      ul>
      <ul>
          
          
          <div id="captcha">div>
      ul>
      <button type="submit" class="btn" id="subbtn">登录button>
    div>
  form>
div>
<script src=“http://static.geetest.com/static/tools/gt.js”这个地址是用于特定工具的文件路径。它指向一个名为“gt.js”的文件,该文件位于“static.geetest.com”的“static/tools”目录下。此文件在相关系统或应用中可能具有特定的功能和作用。>script>
<script>
  var handler = function (captchaObj) {
    // 将验证码加到id为captcha的元素里
    captchaObj.appendTo("#captcha");
   };
  // 获取验证码
  $.get(Admin 下的 Public 目录中的 verifys 文件路径为 "{:U('Admin/Public/verifys')}" 。, function(data) {
    // 使用initGeetest接口
    参数 1 为配置参数,并且该参数与创建 Geetest 实例时所接受的参数是一致的。
    参数 2 为回调,回调的第一个参数是验证码对象,之后能够利用它来进行 appendTo 之类的事件操作。
    initGeetest({
      gt: data.gt,
      challenge: data.challenge,
      product: "float", // 产品形式
      offline: !data.success,
      new_captcha:'true',
      width:'260px',
    }, handler);
  },'json');
script>
body>
html>

四:验证函数

在 /Application/Common/Common 目录下有一个名为 function.php 的文件。

/**
 * geetest检测验证码
 */

function geetest_chcek_verify($data){
  $geetest_id = "7149e2021d7938157e";
  $geetest_key = "62b92039e1e9cf9455";
  $geetest=new使用 \Org\Util\Xb\GeetestLib 这个类,并传入 geetest_id 和 geetest_key 作为参数。
  $user_id=$_SESSION['geetest']['user_id'];
  $ip_address=$_SESSION['geetest']['ip_address'];
  $dataa = array(
    "user_id" => $user_id, # 网站用户id
    "client_type" => "web", 电脑上的浏览器称为 web;手机上的浏览器包括移动应用内完全内置的 web_view 以及通过原生 SDK 植入 APP 应用的方式称为 native
    "ip_address" => $ip_address, # 请在此处传输用户请求验证时所携带的IP
  );
  if ($_SESSION['geetest']['gtserver']==1){
$geetest->success_validate 函数作用于 $data 中的内容,其结果存储在 $result 中。'geetest_challenge'], $data['geetest_validate'], $data['geetest_seccode'], $dataa);
    //return $result;
    if ($result) {
      //return 11;
      return true;
    } else{
      //return 22;
      return false;
    }
  }else{
    ifgeetest 对数据进行了失败验证,即对 $data 进行了 fail_validate 操作。'geetest_challenge'],$data['geetest_validate'],$data['geetest_seccode'])) {
      //return 33;
      return true;  
    }else{
      //return 44;
      return false;
    }
  }
}
//获取id地址
function GetIP() {
  if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
    $cip = $_SERVER["HTTP_CLIENT_IP"];
  } elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
    $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  } elseif (!empty($_SERVER["REMOTE_ADDR"])) {
    $cip = $_SERVER["REMOTE_ADDR"];
  } else {
    $cip = "无法获取!";
  }
  return $cip;
}

五:php 生成验证码 并 验证

//极速验证
  public function verifys(){
    需要引入位于指定路径下的文件,即包含 '/lib/class.geetestlib.php' 的文件,该文件的路径是当前文件所在目录的上一级目录的上一级目录。
    需要引入位于当前文件目录的上一级目录下的 config.php 文件,即 require_once dirname(dirname(__FILE__)).'/config/config.php';
    创建一个名为 $GtSdk 的对象,该对象是通过 new GeetestLib 函数创建的,传入的参数分别是 CAPTCHA_ID 和 PRIVATE_KEY 。
    $geetest_id = "7149e2021d7938157e9";
    $geetest_key = "62b92039e1e9cf";
    $geetest=new \Org\Util\Xb\GeetestLib($geetest_id,$geetest_key);
    //dump($geetest);die;
    $user_id = "test";
    $data = array(
      "user_id" => $user_id, # 网站用户id
      "client_type" => "web", #web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
      "ip_address" => GetIP(), # 请在此处传输用户请求验证时所携带的IP
    );
$status 等于 $geetest 对 $data 进行预处理的结果。1);
    //dump($status);
    $_SESSION['geetest']=array(
      'gtserver'=>$status,
      'user_id'=>$user_id,
      'ip_address'=>GetIP(),
      );
    echo调用 $geetest 的 get_response_str 方法。
  }
 public function cdtsh_log_smfyws() {
    if ($_SESSION['userid']) {
      $this->redirect('Admin/Index/Index');
    } else {
      if (IS_POST) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $geetest_challenge 等于 $_POST 中的 'geetest_challenge' ;
        将 `$_POST['geetest_validate']` 的值赋给 `$geetest_validate` 。
        $_POST 里的 'geetest_seccode' 被赋予给了 $geetest_seccode 。
        $data=I('post.');
        if($data['geetest_challenge']=="" || $data['geetest_validate']=="" ||$data['geetest_seccode']=="" ){
          $this->error('请进行图形验证');
        }else{
          调用 geetest_chcek_verify 函数并传入 $data 进行 dump 操作。
          if若 (geetest_chcek_verify($data) 的结果为假) ,则采取其他措施。
            //echo '验证成功';
            if ($this如果调用 loginAdmin 函数并传入 $username 和 $password 后返回值为真,则执行以下操作;如果调用 loginAdmin 函数并传入 $username 和 $password 后返回值为假,则不执行以下操作。
              $data = M("User")->where("username='".$username."' and password='".md5($password)."'")->find();
              if ($data["status"] != 1) {
                //判断是否禁用
                $this->recordLoginAdmin($_POST['username'], $_POST['password'], 0, "账号禁用"); //记录登录日志
                $this->error('该帐号禁用');
              } else {
                $save["lastlogin_time"] = time();
                $save["lastlogin_ip"] = get_client_ip();
                $save["login_num"] = $data["login_num"] + 1;
                $status = M("user")->where(array("id" => $data['id']))->save($save);
                $_SESSION['userid'] = $data['id'];
                $_SESSION['user'] = $data['username'];
                $_SESSION['rid'] = $data['a_Id'];
                $this->recordLoginAdmin($_POST['username'], $_POST['password'], 1); //记录登录日志
                $this->redirect('Admin/Index/Index');
                登录成功,跳转至 U('Admin/Index/Index') 。
              }
            } else {
              $this->recordLoginAdmin($_POST['username'], $_POST['password'], 0, "账号密码错误"); //记录登录日志
              $this->error('登录失败');
            }
          }else{
            //echo '图形验证失败';
            $this->error('图形验证失败');
          }
        }
      } else {
        $this->display();
      }
    }
  }

效果图如下:

登录页面

点击验证后

以上内容涵盖了文章的全部。若有需要进行学习以及经验交流的朋友,可以添加小编。我们可以一同学习,遇到问题一起交流,共同进步。

让学习成为一种习惯

长按二维码加好友

学习 | 交流 | 分享 | 文章

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读