今天我们就来讲讲滑动验证码,这是一个体验好安全高的方案;
普通的数字、字母组成的验证码大多数很多平台都有去识别这个图片上的文字、数字、字母……
官方:http://www.geetest.com/

做好之后效果图

好了不多说了,进入我们今天的主题吧:
1.注册获取到id和key

2.引入sdk

官方下载地址

可以直接在我这边复制

3.先看看前端我们需要引入什么吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<form id="geetest" action="" method="post" style="margin-top: 50px;" style="margin:0 0 0 200px;">
<div id="captcha"></div>
<input type="submit" value="post提交登录">
</form>
<script src="/statics/js/jquery-1.10.2.min.js"></script>

<script src="http://static.geetest.com/static/tools/gt.js"></script>//引入官方的js

<script>
var handler = function (captchaObj) {
// 将验证码加到id为captcha的元素里
captchaObj.appendTo("#captcha");
};
console.log(handler);
// 使用initGeetest接口
// 参数1:配置参数,与创建Geetest实例时接受的参数一致
// 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件
initGeetest({
gt: "<?= $get_response_str['gt'] ?? '' ?>",
challenge: "<?= $get_response_str['challenge'] ?? '' ?>",
product: "float", // 产品形式
offline: !<?= $get_response_str['success'] ?? '' ?>
}, handler);

</script>

4.先来说说yii存取储session

1
2
3
4
5
6
7
//存
Yii::$app->session['geetest'] = [
'gtserver' => $status,
'user_id' => $user_id
];
//取
print_r($session = Yii::$app->session['geetest']);

5.前端到这里就已经完成了,接下来我们看看php需要做什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//配置项
<?php
return [
//验证码
'CODE_ID' => '63230acdc3b8dfaf53645a27967c72d1',
'CODE_KEY' => '088e11955b70908551f64b9aeac4f68f',
];
?>

//控制器
public function actionCode()
{
$data = [];
$code_id = Yii::$app->params['CODE_ID'];
$code_key = Yii::$app->params['CODE_KEY'];
$geetest = new Geetest($code_id, $code_key);
$user_id = "test";
$status = $geetest->pre_process($user_id);
//这里是验证是否通过验证
if (Yii::$app->request->isPost) {
$geetest_data = Yii::$app->session['geetest'];
$user_id = $geetest_data['user_id'];
$code_data = Yii::$app->request->post();
if ($geetest_data['gtserver'] == 1) {
$result = $geetest->success_validate($code_data['geetest_challenge'], $code_data['geetest_validate'], $code_data['geetest_seccode'], $user_id);
if ($result) {
echo '验证成功';
} else {
echo '验证失败';
}
} else {
if ($geetest->fail_validate($code_data['geetest_challenge'], $code_data['geetest_validate'], $code_data['geetest_seccode'])) {
echo '验证成功';
} else {
echo '验证失败';
}
}
}
//存入session
Yii::$app->session['geetest'] = [
'gtserver' => $status,
'user_id' => $user_id
];
$data['get_response_str'] = json_decode($geetest->get_response_str(), true);
return $this->renderPartial('code1', $data);
}

做到这里大家其实已经可以看到验证码的效果了