建立网站的用户都经历过大量垃圾用户进行恶意注册,我们使用增加验证码排除机器注册。这里用大前端 DUX 主题为例,没办法,dux 的结构清晰,我也比较熟悉,用户也挺多。这个教程也适用于其它的 WordPress 主题,但是需要了解主题结构,别问我该写在哪儿,我也不知道。

首先看使用 PHP 的 GD 库生成验证码的代码:
<?php
/**
* 字母+数字的验证码生成
*/
// 开启 session
session_start();
//创建画布
$image = imagecreatetruecolor(100, 30);
//为画布定义(背景)颜色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
//填充颜色
imagefill($image, 0, 0, $bgcolor);
//设置验证码内容
//定义验证码的内容
$content = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
//创建一个变量存储产生的验证码数据,便于用户提交核对
$captcha = "";
for ($i = 0; $i < 4; $i++) {
// 字体大小
$fontsize = 10;
// 字体颜色
$fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
// 设置字体内容
$fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
$captcha .= $fontcontent;
// 显示的坐标
$x = ($i * 100 / 4) + mt_rand(5, 10);
$y = mt_rand(5, 10);
// 填充内容到画布中
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
$_SESSION["captcha"] = $captcha;
//向浏览器输出图片头信息
header('content-type:image/png');
//输出图片到浏览器
imagepng($image);
//销毁图片
imagedestroy($image);
?>
简单说一下,这里我使用的验证码背景是白色背景,所以验证码的字体颜色应该避免出现靠近 255 的数值(白色),以免看不见验证码。还有就是验证码应该尽量避免出现 0 与 o,l 与 1 等相似字符。
修改 dux 注册表单
dux 的注册表单在主题目录下的 js 文件的 signpop.js 文件中,我们为注册表单新增一项验证码。
新增 HTML 如下:
<h6>\
<label for="inputEmail2"">验证码</label>\
<div>\
<input style="width: 190px;display: inline;" type="text" name="captcha" class="form-control" id="captcha" placeholder="验证码">\
<img src="1.php" onclick="this.src=\'1.php?\'+new Date().getTime();" width="100" height="30">\
</div>\
</h6>\
其中 1.php 就是上面的验证码生成文件的网络地址,你可以自由命名。
然后在 dux 的注册接口中新增一项验证验证码是否正确的判断,接口文件在 action 文件夹下的 log.php 文件中。
代码如下:
这段验证代码应该写在 signup 注册动作中,建议写在登陆验证后面。到此为 dux 主题用户注册新增验证码验证的教程就结束了,主要使用了 GD 库生成图片以及 PHP 的 session 存储验证码信息,需要的可以加上哟。
上面的验证码,我只做了简单处理,没有加背景干扰与干扰线等,需要的可以加上。
代码如下:
//设置背景干扰元素
for ($$i = 0; $i < 200; $i++) {
$pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
}
//设置干扰线
for ($i = 0; $i < 3; $i++) {
$linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
}
这段代码,放在上面生成验证码图片的代码中,$_SESSION[“captcha”] = $captcha;
这句代码之后即可。
文章密码:
不用扫描二维码,公众号还未开通,在下方评论后刷新页面获取密码
[reply]hexsen[/reply]
来源:回代码狗
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
展开阅读更多
评论(17)
试试卡看
@软件 居然被你测出bug,已修复。
能分享评论显示vip标记的方法吗,还有个人中心购买vip
@佛系 抱歉vip功能主题自带的,分享不了
@何先生 这是什么主题啊,为什么我这个名字变成管理员的名字了。(佛系软件)
@软件 什么管理员。。。
请问,你这个代码高亮是什么插件啊,可以分享吗,很好看啊
@佛系软件 自己写的,没有写成插件哦
来康康,学习一下
测试图片
转载我的文章也要留个地址吧,这么狠的吗??
@代码狗 额。。昨晚上搬运来着,我第一篇转载就已经留了你的原地址了回代码狗,后面的几篇忘了增加原地址,实在抱歉。
@何先生 为什么要多个回字呢?
@代码狗 噗...我把你logo d 看成回了,一会儿改一下