Heim > Backend-Entwicklung > PHP-Tutorial > Beispielerklärung für einen PHP-Extrem-Verifizierungscode

Beispielerklärung für einen PHP-Extrem-Verifizierungscode

高洛峰
Freigeben: 2023-03-05 11:24:02
Original
2004 Leute haben es durchsucht

Sie können diesen Artikel finden, was bedeutet, dass Sie mit der Jiexian-Verifizierung nicht mehr völlig unbekannt sind. Ich werde nicht auf den ganzen Unsinn eingehen und einfach anfangen, zu erklären, wie man ihn verwendet. Aber vorher fügen wir vielleicht ein paar URLs ein Verwendung:

Offizielle Website: http://www.geetest.com/

Offizielles Dokument: http://www.geetest.com/install/sections/idx -basic-introduction. html

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

Verwendung:

Zuerst, um die Vorderseite zu bestätigen -End-Nutzungsseite, z. B. die Anmeldeseite


 

1. Greifen Sie auf der Anmeldeseite auf die importierte Klassenbibliothek zu :

Wenn Ihre Website https verwendet, müssen Sie nur den Ort ändern, an dem Jiqianku in das https-Protokoll eingeführt wird, und es besteht keine Notwendigkeit, andere Orte zu ändern. Ersetzen Sie es beispielsweise durch den folgenden Code:


 

Das Frontend initialisieren

Der folgende Code muss nach dem Laden der Seite ausgeführt werden. Wenn Sie jQuery verwenden, können Sie ihn in $(function(){}); schreiben.

$.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);
  }
});
Nach dem Login kopieren

Der obige Code bedeutet, dass nach dem Wenn die Seite geladen ist, müssen Sie angeben, ob die Informationen zum Bestätigungscode von der URL-Adresse abgerufen werden sollen. Was in der obigen URL-Adresse „../web/StartCaptchaServlet.php“ steht, wird auf der Serverseite ausführlich erläutert Codebereitstellung.

Es sollte jedoch beachtet werden, dass es im obigen Code eine Rückruffunktion namens „handlerPopup“ gibt. Diese Funktion ist der eigentliche Initialisierungscode, den Sie zur Überprüfung des Codes benötigen:

// 代码详细说明
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
};
  
Nach dem Login kopieren

Zu diesem Zeitpunkt wurden alle Front-End-Einstellungen geschrieben, offizielle Dokumentation: http://www.geetest.com/install/sections/idx-client-sdk.html

3. Serverseitig Bereitstellung (PHP)

Im ersten Schritt legen wir eine Adresse wie „../web/StartCaptchaServlet.php“ fest. Was ist in diese Adresse zu schreiben:

<?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();
?>
  
Nach dem Login kopieren

Wie man es bekommt die Verifizierungs-ID und den Verifizierungsschlüssel:

1. Registrieren Sie ein Konto aus dem Verifizierungshintergrund
2. Fügen Sie eine Verifizierung hinzu, um einen Satz aktuell verifizierter ID/Schlüssel zu erhalten.
3 die config.php-Datei bzw. der Wert der Variablen captcha_id/private_key in

4. Serverseitige Überprüfung (sekundäre Überprüfung) nach dem Klicken auf die Schaltfläche „Senden“

Zum Beispiel, wie oben erwähnt, wann Der Benutzer meldet sich an, Sie geben den Benutzernamen und das Passwort ein und die Informationen zum Bestätigungscode wurden an den Server übermittelt. Zu diesem Zeitpunkt können Sie eine Überprüfung durchführen:

<?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);
}
?>
  
Nach dem Login kopieren

Vielen Dank fürs Lesen, ich hoffe, dass dies möglich ist Helfen Sie allen, vielen Dank für Ihre Unterstützung dieser Website!

Weitere Beispiele für PHP-Verifizierungscodes und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage