前言
“访问过于频繁,请先完成验证”,相信大家对这句话应该不陌生。当我们访问一个网站过于频繁时,就会弹出这样的提示,甚至于让我们先通过滑动验证码。
开发过程
1、模拟当前为新闻列表。

2、前台接入KgCaptcha
1<script src="captcha.js?appid=xxx"></script> 2<script type="text/javascript"> 3kg.captcha({ 4 // 绑定弹窗按钮 5 button: "#captchaButton", 6 // 验证成功事务处理 7 success: function (e) { 8 // 验证成功,直接提交表单 9 console.log(e); 10 document.cookie = "sNum=1"; 11 document.cookie = "sTime="+Math.round(new Date().getTime()/1000); 12 document.getElementById('kgCaptchaToken').value = e['token'] 13 form1.submit(); 14 }, 15 // 验证失败事务处理 16 failure: function (e) { 17 console.log(e); 18 }, 19 // 点击刷新按钮时触发 20 refresh: function (e) { 21 console.log(e); 22 } 23 24 </script> 25 26<a id="captchaButton" style="display: none;">点击弹出验证窗口</a> 27<form method="post" id="form1" name="form1"> 28 <input type="hidden" name="action" value="captcha" /> 29 <input type="hidden" name="kgCaptchaToken" id="kgCaptchaToken" value="" /> 30</form>

3、要求
- 通过cookie监测当前页面访问,指定时间内访问次数超出,则弹出验证码,要求用户验证。
- 若为首次访问,弹出验证码,要求用户验证。
1// 设置cookie 2window.onload = function() { 3 // 当前时间 4 var cTime = Math.round(new Date().getTime()/1000) 5 // 当前cookie的访问次数 6 var sNum = get_cookie2('sNum') 7 // 当前cookie的上一次访问时间 8 var sTime = get_cookie2('sTime') 9 // 判断cookie是否设置 10 if (sNum==undefined && sTime==undefined) { 11 document.getElementById('captchaButton').click() 12 } else { 13 // 判断访问次数和上一次访问时间 14 if (parseInt(sTime)+10 <= cTime && sNum>9) { 15 document.getElementById('captchaButton').click() 16 } else { 17 if (cTime - sTime < 10) { 18 document.cookie = "sNum="+(parseInt(sNum)+1); 19 document.cookie = "sTime="+sTime; 20 } else { 21 document.cookie = "sNum=1"; 22 document.cookie = "sTime="+cTime; 23 } 24 } 25 } 26} 27 28// 获取cookie的方法 29function get_cookie2(val) { 30 var arr = document.cookie.split(';'); 31 for(var i = 0; i < arr.length; i++){ 32 var arr2 = arr[i].split('='); 33 arr2[0] = arr2[0].replace(/\s*/g,""); 34 if(arr2[0] == val){ 35 return arr2[1] 36 } 37 } 38}
4、后端验证
1<?php 2header("Content-type:text/html;charset=utf-8"); 3// 后端验证 4if (isset($_POST) && $_POST['action'] == 'captcha') { 5 include "./KgCaptchaSDK.php"; 6 // 填写你的 AppId,在应用管理中获取 7 $appId = "xxx"; 8 // 填写你的 AppSecret,在应用管理中获取 9 $appSecret = "xxx"; 10 $request = new kgCaptcha($appId, $appSecret); 11 // 填写应用服务域名,在应用管理中获取 12 $request->appCdn = "https://cdn.kgcaptcha.com"; 13 // 前端验证成功后颁发的 token,有效期为两分钟 14 $request->token = $_POST["kgCaptchaToken"]; 15 // 当安全策略中的防控等级为3时必须填写 16 $request->userId = "kgCaptchaDemo"; 17 // 请求超时时间,秒 18 $request->connectTimeout = 10; 19 $requestResult = $request->sendRequest(); 20 if ($requestResult->code === 0) { 21 // 验签成功逻辑处理 22 echo "<script>alert('验证通过');</script>"; 23 header('location: demo.php'); 24 } else { 25 // 验签失败逻辑处理 26 echo "<script>alert('验证失败,错误代码:{$requestResult->code}, 错误信息:{$requestResult->msg}');</script>"; 27 header('location: demo.php'); 28 } 29} 30 31?>
最后
SDK开源地址:KgCaptcha (KgCaptcha) · GitHub,顺便做了一个演示:凯格行为验证码在线体验