>  기사  >  백엔드 개발  >  PHP 극단적 인증코드 예시 설명

PHP 극단적 인증코드 예시 설명

高洛峰
高洛峰원래의
2017-02-03 17:46:491968검색

이 기사를 찾을 수 있습니다. 이는 더 이상 Jiexian 인증에 완전히 익숙하지 않다는 것을 의미합니다. 말도 안되는 내용을 다루지 않고 사용 방법을 설명하기 전에 먼저 몇 가지 URL을 붙여넣어 보겠습니다. 사용:

공식 웹사이트: http://www.geetest.com/

공식 문서: http://www.geetest.com/install/sections/idx -basic-introduction. html

github: https://github.com/GeeTeam/gt-php-sdk.git

사용방법:

먼저 앞면을 확인하려면 -로그인 페이지와 같은 최종 사용 페이지

d90e94804a38b999d0f6d02b56d79e5a2cacc6d41bbb37262a98f745aa00fbf0
5f80e307eff5c414e69459f0bdcaaa4c2cacc6d41bbb37262a98f745aa00fbf0 

1. 로그인 페이지에서 가져온 클래스 라이브러리에 액세스합니다. :

귀하의 웹사이트에서 https를 사용하는 경우 Jiqianku가 https 프로토콜로 도입되는 위치만 변경하면 되며 다른 위치는 변경할 필요가 없습니다. 예를 들어 다음 코드로 바꿉니다.

1219a96a82800cca3c808cb42a60e37c2cacc6d41bbb37262a98f745aa00fbf0
17569962678037bcb4575e53cacd5df62cacc6d41bbb37262a98f745aa00fbf0 

2. 프론트엔드 초기화

다음 코드는 페이지가 로드된 후 실행되어야 합니다. jQuery를 사용하는 경우 $(function(){});

$.ajax({
  // 获取id,challenge,success(是否启用failback)
  url: "../web/StartCaptchaServlet.php?t=" + (new Date()).getTime(), // 加随机数防止缓存
  type: "get",
  dataType: "json",
  success: function (data) {
    // 使用initGeetest接口
    // 参数1:配置参数
    // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
    initGeetest({
      gt: data.gt,
      challenge: data.challenge,
      product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效
      offline: !data.success // 表示用户后台检测极验服务器是否宕机,与SDK配合,用户一般不需要关注
    }, handlerPopup);
  }
});

내부에 작성할 수 있습니다. 위 코드는 페이지가 로드된 후를 의미합니다. 위 URL 주소 "../web/StartCaptchaServlet.php"에 적힌 내용은 해당 URL에서 자세히 설명드리겠습니다. 서버 측 코드 배포.

하지만 위 코드에는 "handlerPopup"이라는 콜백 함수가 있다는 점에 유의해야 합니다. 이 함수는 코드를 확인하는 데 필요한 실제 초기화 코드입니다. 다음과 같습니다.

// 代码详细说明
var handlerPopup = function (captchaObj) {
  // 注册提交按钮事件,比如在登陆页面的登陆按钮
  $("#popup-submit").click(function () {
    // 此处省略在登陆界面中,获取登陆数据的一些步骤
     
    // 先校验是否点击了验证码
    var validate = captchaObj.getValidate();
    if (!validate) {
      alert('请先完成验证!');
      return;
    }
    // 提交验证码信息,比如登陆页面,你需要提交登陆信息,用户名和密码等登陆数据
    $.ajax({
      url: "../web/VerifyLoginServlet.php",
      type: "post",
      // dataType: "json",
      data: {
        // 用户名和密码等其他数据,自己获取,不做演示
        username:username,
        password:password,
        // 验证码数据,这些数据不用自己获取
        // 这是二次验证所需的三个值
        // 当然,你也可以直接设置验证码单独校验,省略其他信息
        geetest_challenge: validate.geetest_challenge,
        geetest_validate: validate.geetest_validate,
        geetest_seccode: validate.geetest_seccode
      },
      // 这里是正确返回处理结果的处理函数
      // 假设你就返回了1,2,3
      // 当然,正常情况是返回JSON数据
      success: function (result) {
        // 1表示验证码验证失败
        if (result == "1") {
          alert("验证码验证失败!");
        }else if (result == "2") {
          alert("用户名或密码错误!");
        }else if (result == "3") {
          alert("登陆成功!");
          // 登陆成功了,可以在这里做其他处理
        }else{
          alert("登陆错误!");
        }
      }
    });
  });
  // 弹出式需要绑定触发验证码弹出按钮
  // 比如在登陆页面,这个触发按钮就是登陆按钮
  captchaObj.bindOn("#popup-submit");
    
  // 将验证码加到id为captcha的元素里
  // 验证码将会在下面指定的元素中显示出来
  captchaObj.appendTo("#popup-captcha");
    
  // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html
};
  

이 시점에서 프론트 엔드의 모든 설정이 작성되었습니다. 공식 문서: http://www.geetest.com/install/sections/idx-client-sdk.html

3. 서버 측 배포 (PHP)

첫 번째 단계에서는 "../web/StartCaptchaServlet.php"와 같은 주소를 설정합니다. 이 주소에 작성할 내용은

<?php
// 引入文件
require_once dirname(dirname(__FILE__)) . &#39;/lib/class.geetestlib.php&#39;;
require_once dirname(dirname(__FILE__)) . &#39;/config/config.php&#39;;
// 实例化,实例化的参数在config中配置,分别是:验证ID 和 验证Key,如何获取下面会说。
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
session_start();
// 这个是用户的标识,或者说是给极验服务器区分的标识,如果你项目没有预先设置,可以像下面这样设置:
if(!isset($_SESSION[&#39;user_id&#39;])){
  $_SESSION[&#39;user_id&#39;]=uniqid();// 生成一个唯一ID
}
$user_id = $_SESSION[&#39;user_id&#39;];
// 或者,你就直接写成:
// $user_id = "test";
  
// 生成验证码信息,并返回给客户端
$status = $GtSdk->pre_process($user_id);
$_SESSION[&#39;gtserver&#39;] = $status;
$_SESSION[&#39;user_id&#39;] = $user_id;
echo $GtSdk->get_response_str();
?>
  

인증 방법입니다. ID 및 인증 키:

1. 인증 백그라운드에서 계정 등록
2. 현재 인증된 ID/키 세트를 가져오기 위해 인증 추가
3. ID 및 키를 captcha_id/로 바꿉니다. config.php 파일에서 private_key 변수의 값

4. 제출 버튼 클릭 후 서버측 검증(2차 검증)

예를 들어 위에서 언급한 것처럼 사용자가 로그인하면 사용자 이름, 비밀번호 및 인증 코드 정보가 모두 서버에 제출되었습니다. 이때 인증을 수행할 수 있습니다.

<?php
// 引入文件
require_once dirname(dirname(__FILE__)) . &#39;/lib/class.geetestlib.php&#39;;
require_once dirname(dirname(__FILE__)) . &#39;/config/config.php&#39;;
session_start();
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
  
// 比如你设置了一个验证码是否验证通过的标识
$code_flag=false;
  
// 这里获取你之前设置的user_id,传送给极验服务器做校验
$user_id = $_SESSION[&#39;user_id&#39;];
if ($_SESSION[&#39;gtserver&#39;] == 1) {
  $result = $GtSdk->success_validate($_POST[&#39;geetest_challenge&#39;], $_POST[&#39;geetest_validate&#39;], $_POST[&#39;geetest_seccode&#39;], $user_id);
  if ($result) {
    // 验证码验证成功
    $code_flag=true;
  }
}else{
  if ($GtSdk->fail_validate($_POST[&#39;geetest_challenge&#39;],$_POST[&#39;geetest_validate&#39;],$_POST[&#39;geetest_seccode&#39;])) {
     // 验证码验证成功
    $code_flag=true;
  }
}
  
// 如果验证码验证成功,再进行其他校验
if($code_flag){
  // 其他验证操作
  // 用户名不对时,返回2,其他错误返回3,等等。。。。
}else{
  // 验证码验证失败,返回1,这里和上面相呼应,当然我的项目没有简单的返回1,而是返回了JSON数据
  echo 1;
  exit(-1);
}
?>
  

읽어 주셔서 감사합니다. 모두에게 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!

더 많은 PHP 인증 코드 예제와 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.