亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP 極驗(yàn)驗(yàn)證碼實(shí)例講解

 更新時(shí)間:2016年09月29日 14:21:02   作者:caoruiy  
這篇文章主要介紹了PHP 極驗(yàn)驗(yàn)證碼實(shí)例講解的相關(guān)資料,需要的朋友可以參考下

你能找到這篇文章,說(shuō)明你對(duì)極驗(yàn)驗(yàn)證已經(jīng)不是完全陌生的了,所有廢話(huà)我就不多說(shuō)了,直接開(kāi)始表說(shuō)如何使用它,不過(guò)在此之前呢,先粘貼幾個(gè)你可能會(huì)用得到的網(wǎng)址:

官網(wǎng):http://www.geetest.com/

官方文檔:http://www.geetest.com/install/sections/idx-basic-introduction.html

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

如何使用:

首先要確認(rèn)前端使用頁(yè)面,比如登陸頁(yè)面

<script src="http://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="http://static.geetest.com/static/tools/gt.js"></script> 
 

1.在登陸頁(yè)面訪問(wèn)引入類(lèi)庫(kù):

如果您的網(wǎng)站使用https,則只需要將引入極驗(yàn)庫(kù)的地方換成https協(xié)議即可,不需要更改其它地方。例如更換成以下代碼即可:

<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://static.geetest.com/static/tools/gt.js"></script>  

2.初始化前端

下面的代碼需要在頁(yè)面加載后就執(zhí)行,如果你使用jQuery,可以寫(xiě)在$(function(){});內(nèi)

$.ajax({
  // 獲取id,challenge,success(是否啟用failback)
  url: "../web/StartCaptchaServlet.php?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存
  type: "get",
  dataType: "json",
  success: function (data) {
    // 使用initGeetest接口
    // 參數(shù)1:配置參數(shù)
    // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它做appendTo之類(lèi)的事件
    initGeetest({
      gt: data.gt,
      challenge: data.challenge,
      product: "popup", // 產(chǎn)品形式,包括:float,embed,popup。注意只對(duì)PC版驗(yàn)證碼有效
      offline: !data.success // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī),與SDK配合,用戶(hù)一般不需要關(guān)注
    }, handlerPopup);
  }
});
  

上面代碼的意思是說(shuō),頁(yè)面加載后,需要到你指定的URL地址上獲得驗(yàn)證碼信息,至于上面的URL地址“../web/StartCaptchaServlet.php”里面寫(xiě)了什么內(nèi)容,這個(gè)我們?cè)诜?wù)器端代碼部署會(huì)詳細(xì)說(shuō)明。

但是需要說(shuō)明的是,上面的代碼里有一個(gè)回調(diào)函數(shù)叫“handlerPopup”,這個(gè)函數(shù)是你需要驗(yàn)證碼的真正初始化代碼:如下:

// 代碼詳細(xì)說(shuō)明
var handlerPopup = function (captchaObj) {
  // 注冊(cè)提交按鈕事件,比如在登陸頁(yè)面的登陸按鈕
  $("#popup-submit").click(function () {
    // 此處省略在登陸界面中,獲取登陸數(shù)據(jù)的一些步驟
    
    // 先校驗(yàn)是否點(diǎn)擊了驗(yàn)證碼
    var validate = captchaObj.getValidate();
    if (!validate) {
      alert('請(qǐng)先完成驗(yàn)證!');
      return;
    }
    // 提交驗(yàn)證碼信息,比如登陸頁(yè)面,你需要提交登陸信息,用戶(hù)名和密碼等登陸數(shù)據(jù)
    $.ajax({
      url: "../web/VerifyLoginServlet.php",
      type: "post",
      // dataType: "json",
      data: {
        // 用戶(hù)名和密碼等其他數(shù)據(jù),自己獲取,不做演示
        username:username,
        password:password,
        // 驗(yàn)證碼數(shù)據(jù),這些數(shù)據(jù)不用自己獲取
        // 這是二次驗(yàn)證所需的三個(gè)值
        // 當(dāng)然,你也可以直接設(shè)置驗(yàn)證碼單獨(dú)校驗(yàn),省略其他信息
        geetest_challenge: validate.geetest_challenge,
        geetest_validate: validate.geetest_validate,
        geetest_seccode: validate.geetest_seccode
      },
      // 這里是正確返回處理結(jié)果的處理函數(shù)
      // 假設(shè)你就返回了1,2,3
      // 當(dāng)然,正常情況是返回JSON數(shù)據(jù)
      success: function (result) {
        // 1表示驗(yàn)證碼驗(yàn)證失敗
        if (result == "1") {
          alert("驗(yàn)證碼驗(yàn)證失??!");
        }else if (result == "2") {
          alert("用戶(hù)名或密碼錯(cuò)誤!");
        }else if (result == "3") {
          alert("登陸成功!");
          // 登陸成功了,可以在這里做其他處理
        }else{
          alert("登陸錯(cuò)誤!");
        }
      }
    });
  });
  // 彈出式需要綁定觸發(fā)驗(yàn)證碼彈出按鈕
  // 比如在登陸頁(yè)面,這個(gè)觸發(fā)按鈕就是登陸按鈕
  captchaObj.bindOn("#popup-submit");
   
  // 將驗(yàn)證碼加到id為captcha的元素里
  // 驗(yàn)證碼將會(huì)在下面指定的元素中顯示出來(lái)
  captchaObj.appendTo("#popup-captcha");
   
  // 更多接口參考:http://www.geetest.com/install/sections/idx-client-sdk.html
};
  

至此,前端的所有設(shè)置都寫(xiě)完了,官方的說(shuō)明文檔:http://www.geetest.com/install/sections/idx-client-sdk.html

 3.服務(wù)器端部署(PHP) 

在第一步中,我們?cè)O(shè)置了一個(gè)這樣的地址“../web/StartCaptchaServlet.php”,在這個(gè)地址里邊寫(xiě)什么呢:

<?php
// 引入文件
require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php';
require_once dirname(dirname(__FILE__)) . '/config/config.php';
// 實(shí)例化,實(shí)例化的參數(shù)在config中配置,分別是:驗(yàn)證ID 和 驗(yàn)證Key,如何獲取下面會(huì)說(shuō)。
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
session_start();
// 這個(gè)是用戶(hù)的標(biāo)識(shí),或者說(shuō)是給極驗(yàn)服務(wù)器區(qū)分的標(biāo)識(shí),如果你項(xiàng)目沒(méi)有預(yù)先設(shè)置,可以像下面這樣設(shè)置:
if(!isset($_SESSION['user_id'])){
  $_SESSION['user_id']=uniqid();// 生成一個(gè)唯一ID
}
$user_id = $_SESSION['user_id'];
// 或者,你就直接寫(xiě)成:
// $user_id = "test";
 
// 生成驗(yàn)證碼信息,并返回給客戶(hù)端
$status = $GtSdk->pre_process($user_id);
$_SESSION['gtserver'] = $status;
$_SESSION['user_id'] = $user_id;
echo $GtSdk->get_response_str();
?>
  

如何獲取 驗(yàn)證ID 和 驗(yàn)證Key :

1.從 驗(yàn)證后臺(tái) 注冊(cè)賬號(hào)
2.添加驗(yàn)證,可以獲取一組當(dāng)前驗(yàn)證的ID/Key
3.將ID和Key分別替換到config.php文件中的captcha_id/private_key變量的值 

4.點(diǎn)擊提交按鈕之后的服務(wù)端校驗(yàn)(二次驗(yàn)證)

比如上面說(shuō)的,用戶(hù)登錄時(shí),你把用戶(hù)名和密碼和驗(yàn)證碼信息都提交到服務(wù)器了,這個(gè)時(shí)候,你就可以做校驗(yàn)了:

<?php
// 引入文件
require_once dirname(dirname(__FILE__)) . '/lib/class.geetestlib.php';
require_once dirname(dirname(__FILE__)) . '/config/config.php';
session_start();
$GtSdk = new GeetestLib(CAPTCHA_ID, PRIVATE_KEY);
 
// 比如你設(shè)置了一個(gè)驗(yàn)證碼是否驗(yàn)證通過(guò)的標(biāo)識(shí)
$code_flag=false;
 
// 這里獲取你之前設(shè)置的user_id,傳送給極驗(yàn)服務(wù)器做校驗(yàn)
$user_id = $_SESSION['user_id'];
if ($_SESSION['gtserver'] == 1) {
  $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $user_id);
  if ($result) {
    // 驗(yàn)證碼驗(yàn)證成功
    $code_flag=true;
  }
}else{
  if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) {
     // 驗(yàn)證碼驗(yàn)證成功
    $code_flag=true;
  }
}
 
// 如果驗(yàn)證碼驗(yàn)證成功,再進(jìn)行其他校驗(yàn)
if($code_flag){
  // 其他驗(yàn)證操作
  // 用戶(hù)名不對(duì)時(shí),返回2,其他錯(cuò)誤返回3,等等。。。。
}else{
  // 驗(yàn)證碼驗(yàn)證失敗,返回1,這里和上面相呼應(yīng),當(dāng)然我的項(xiàng)目沒(méi)有簡(jiǎn)單的返回1,而是返回了JSON數(shù)據(jù)
  echo 1;
  exit(-1);
}
?>
  

感謝你的閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • dedecms函數(shù)分享之獲取某一欄目所有子欄目

    dedecms函數(shù)分享之獲取某一欄目所有子欄目

    以前從來(lái)沒(méi)寫(xiě)過(guò)遞歸(其實(shí)想想,對(duì)算法完全沒(méi)概念),剛好有這個(gè)需求,試著寫(xiě)了一下,發(fā)現(xiàn)也挺容易的,特別記錄一下。
    2014-05-05
  • PHP5中使用PDO連接數(shù)據(jù)庫(kù)的方法

    PHP5中使用PDO連接數(shù)據(jù)庫(kù)的方法

    PDO(PHP Data Object) 是PHP 5 中加入的東西,是PHP 5新加入的一個(gè)重大功能,因?yàn)樵赑HP 5以前的php4/php3都是一堆的數(shù)據(jù)庫(kù)擴(kuò)展來(lái)跟各個(gè)數(shù)據(jù)庫(kù)的連接和處理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等。
    2010-08-08
  • PHP和Selenium搭建高效網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)技術(shù)探索

    PHP和Selenium搭建高效網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)技術(shù)探索

    隨著信息時(shí)代的到來(lái),網(wǎng)站被認(rèn)為是獲取信息的主要途徑之一,但是,手動(dòng)獲取網(wǎng)站上的信息是非常繁瑣的,因此出現(xiàn)了自動(dòng)抓取網(wǎng)頁(yè)的方式——網(wǎng)絡(luò)爬蟲(chóng),這篇文章將介紹如何使用PHP和Selenium搭建一個(gè)高效的網(wǎng)絡(luò)爬蟲(chóng)來(lái)自動(dòng)收集信息
    2024-01-01
  • PHP實(shí)現(xiàn)的抓取小說(shuō)網(wǎng)站內(nèi)容功能示例

    PHP實(shí)現(xiàn)的抓取小說(shuō)網(wǎng)站內(nèi)容功能示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的抓取小說(shuō)網(wǎng)站內(nèi)容功能,涉及php頁(yè)面抓取、正則匹配、文件讀寫(xiě)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • PHP中間件模式的兩種實(shí)現(xiàn)方法詳解

    PHP中間件模式的兩種實(shí)現(xiàn)方法詳解

    在PHP中,中間件是一種常用的設(shè)計(jì)模式,用于處理請(qǐng)求和響應(yīng),這篇文章主要為大家詳細(xì)介紹了兩種中間件的實(shí)現(xiàn)方法,有需要的小伙伴可以參考一下
    2023-11-11
  • PHP下常用正則表達(dá)式整理

    PHP下常用正則表達(dá)式整理

    PHP下常用正則表達(dá)式整理,使用php的朋友能用得到。
    2010-10-10
  • php 刪除記錄實(shí)現(xiàn)代碼

    php 刪除記錄實(shí)現(xiàn)代碼

    這里讓大家知道php下刪除記錄的實(shí)現(xiàn)方法
    2009-03-03
  • 解析func_num_args與func_get_args函數(shù)的使用

    解析func_num_args與func_get_args函數(shù)的使用

    本篇文章是對(duì)func_num_args與func_get_args函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php變量范圍介紹

    php變量范圍介紹

    變量的范圍即它定義的上下文背景(也就是它生效的范圍)。大部分的 PHP 變量只有一個(gè)單獨(dú)的范圍。這個(gè)單獨(dú)的范圍跨度同樣包含了 include 和 require 引入的文件
    2012-10-10
  • PHP連接及操作PostgreSQL數(shù)據(jù)庫(kù)的方法詳解

    PHP連接及操作PostgreSQL數(shù)據(jù)庫(kù)的方法詳解

    這篇文章主要介紹了PHP連接及操作PostgreSQL數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了php針對(duì)PostgreSQL數(shù)據(jù)庫(kù)的基本連接以及增刪改查等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01

最新評(píng)論