ThinkPHP5实现极验滑动验证码geetest功能

现在很多网站,比如淘宝,京东等都改用使用极验拖动验证码实现登录,这种方式比传统的验证码方式有更好的体验,减少用户输入的错误,也同样能起到防盗刷的功能。现在很多极验都是第三方的,也很多都是收费的。这里主要介绍thinkphp整合系列之极验滑动验证码geetest,官网:http://www.geetest.com

具体如下:

一:注册获取key

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

v2-112b7994f77086d58860a9ca938b7f46_720w.jpgv2-769ed1656b998eb716c8f60c948472e1_720w.jpg

二:导入sdk

/ThinkPHP/Library/Org/Xb/GeetestLip.class.php(此处GeetestLip.class.php是我重新命名的geetest类文件,原名为class.geetestlib.php)

v2-81e26a7f2af70575722394ec09f69c49_720w.jpg

此处牵扯到thinkphp引入第三方类,我把第三方类放到Org/Util/Xb下面了,同时对该类文件加入命名空间如下,否则实例化类时找不到文件

v2-92733dc9501be099dafaea0ae347103c_720w.jpg

三:生成验证样式

admin/view/public/cdtsh_log_smfyws.php

<!doctype html><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” rel=”external nofollow” ><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=”external nofollow” 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:;” rel=”external nofollow” style=”height:116px;width:250px;”>后台管理中心</a></h1><form method=”post”action=”{:U(‘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=”position:absolute;left:248px;top:12px;”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=”position:absolute;left:248px;top:12px;”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=”required;text;remote[{: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><!–<input type=”button”value=”异步验证登录”onclick=”check_verify()”>–><!–<input type=”submit”value=”post提交登录”>–><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”></script><script>var handler=function(captchaObj){//将验证码加到id为captcha的元素里captchaObj.appendTo(“#captcha”);};//获取验证码$.get(“{: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=newOrgUtilXbGeetestLib($geetest_id,$geetest_key);

$geetest_key=”62b92039e1e9cf9455″;

$ip_address=$_SESSION[‘geetest’][‘ip_address’];

$user_id=$_SESSION[‘geetest’][‘user_id’];

$dataa=array(

“client_type”=>”web”,#web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式

“user_id”=>$user_id,#网站用户id

“ip_address”=>$ip_address,#请在此处传输用户请求验证时所携带的IP

);

$result=$geetest->success_validate($data[‘geetest_challenge’],$data[‘geetest_validate’],$data[‘geetest_seccode’],$dataa);

if($_SESSION[‘geetest’][‘gtserver’]==1){

//return$result;

if($result){

//return 11;

return true;

}else{

if($geetest->fail_validate($data[‘geetest_challenge’],$data[‘geetest_validate’],$data[‘geetest_seccode’])){

//return 22;

return false;

}

}else{

//return 33;

return true;

}else{

//return 44;

return false;

}

}

}elseif(!empty($_SERVER[“HTTP_X_FORWARDED_FOR”])){

}

//获取id地址

function GetIP(){

if(!empty($_SERVER[“HTTP_CLIENT_IP”])){

$cip=$_SERVER[“HTTP_CLIENT_IP”];

$cip=”无法获取!”;

$cip=$_SERVER[“HTTP_X_FORWARDED_FOR”];

}elseif(!empty($_SERVER[“REMOTE_ADDR”])){

$cip=$_SERVER[“REMOTE_ADDR”];

}else{

}

return$cip;

}

五:php生成验证码并验证

//极速验证

public function verifys(){

//require_once dirname(dirname(dirname(__FILE__))).’/lib/class.geetestlib.php’;

//require_once dirname(dirname(__FILE__)).’/config/config.php’;

$geetest_id=”7149e2021d7938157e9″;

//$GtSdk=new GeetestLib(CAPTCHA_ID,PRIVATE_KEY);

$geetest_key=”62b92039e1e9cf”;

$data=array(

$geetest=newOrgUtilXbGeetestLib($geetest_id,$geetest_key);

//dump($geetest);die;

$user_id=”test”;

“user_id”=>$user_id,#网站用户id

$status=$geetest->pre_process($data,1);

“client_type”=>”web”,#web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式

“ip_address”=>GetIP(),#请在此处传输用户请求验证时所携带的IP

);

//dump($status);

$_SESSION[‘geetest’]=array(

‘gtserver’=>$status,

$username=$_POST[‘username’];

‘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){

if($data[‘geetest_challenge’]==””||$data[‘geetest_validate’]==””||$data[‘geetest_seccode’]==””){

$password=$_POST[‘password’];

//$geetest_challenge=$_POST[‘geetest_challenge’];

//$geetest_validate=$_POST[‘geetest_validate’];

//$geetest_seccode=$_POST[‘geetest_seccode’];

$data=I(‘post.’);

$this->error(‘请进行图形验证’);

}else{

if($data[“status”]!=1){

//dump(geetest_chcek_verify($data));

if(geetest_chcek_verify($data)){

//echo’验证成功’;

if($this->loginAdmin($username,$password)){

$data=M(“User”)->where(“username='”.$username.”‘and password='”.md5($password).”‘”)->find();

//判断是否禁用

$status=M(“user”)->where(array(“id”=>$data[‘id’]))->save($save);

$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;

$_SESSION[‘userid’]=$data[‘id’];

$this->recordLoginAdmin($_POST[‘username’],$_POST[‘password’],0,”账号密码错误”);//记录登录日志

$_SESSION[‘user’]=$data[‘username’];

$_SESSION[‘rid’]=$data[‘a_Id’];

$this->recordLoginAdmin($_POST[‘username’],$_POST[‘password’],1);//记录登录日志

$this->redirect(‘Admin/Index/Index’);

//$this->success(‘登录成功’,U(‘Admin/Index/Index’));

}

}else{

$this->error(‘登录失败’);

}

}else{

}

//echo’图形验证失败’;

$this->error(‘图形验证失败’);

}

}

}else{

$this->display();

}

}

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/115545.html<

(0)
运维的头像运维
上一篇2025-02-18 03:31
下一篇 2025-02-18 03:33

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注