下面是用PHP实现验证码功能的完整攻略,包含两条示例说明:
1. 什么是验证码
验证码(CAPTCHA,全称"Completely Automated Public Turing test to tell Computers and Humans Apart")是一种通过人类轻松识别,但计算机难以识别的图像或文字,用于区分人类和计算机自动化程序的测试。
2. 如何使用PHP实现验证码功能
使用PHP开发验证码功能主要分为以下几个步骤:
2.1 生成验证码图片
使用PHP中的GD库生成一个验证码图片,可以使用如下代码实现:
// 创建图像资源
$image = imagecreatetruecolor(100, 40);
// 设置背景色
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
// 生成4位随机验证码
$code = '';
for ($i = 0; $i < 4; $i++) {
$fontcolor = imagecolorallocate($image, mt_rand(0, 125), mt_rand(0, 125), mt_rand(0, 125));
$fontsize = 20; // 字体大小
$fontcontent = mt_rand(0, 9); // 字符内容
$code .= $fontcontent;
$x = ($i * 100 / 4) + mt_rand(5, 10); // 字符位置X轴
$y = mt_rand(5, 10); // 字符位置Y轴
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
// 添加干扰线
for ($i = 0; $i < 6; $i++) {
$linecolor = imagecolorallocate($image, mt_rand(0, 125), mt_rand(0, 125), mt_rand(0, 125));
imageline($image, mt_rand(0, 100), mt_rand(0, 40), mt_rand(0, 100), mt_rand(0, 40), $linecolor);
}
// 添加干扰点
for ($i = 0; $i < 100; $i++) {
$pointcolor = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($image, mt_rand(0, 100), mt_rand(0, 40), $pointcolor);
}
// 输出图像
header('content-type:image/png');
imagepng($image);
// 释放资源
imagedestroy($image);
2.2 将验证码存入session中
在生成验证码图片的代码中,我们已经获得了验证码字符串,我们可以将其保存到session中,以便后续验证操作的使用。示例代码如下:
session_start();
$_SESSION['code'] = $code; // $code为上一步中生成的验证码字符串
2.3 验证输入的验证码是否正确
在提交表单时,我们需要验证用户输入的验证码是否正确,示例代码如下:
session_start();
if (!empty($_POST['code']) && strtolower($_POST['code']) === strtolower($_SESSION['code'])) {
// 验证通过,执行相应的操作
} else {
// 验证失败,给出相应提示
}
示例一:在登录页面中嵌入验证码功能
在登录页面中增加验证码功能,可以避免恶意攻击者通过暴力猜测密码等手段进行非法登录。登录页面示例代码如下:
<form method="post" action="login.php">
<p>用户名:<input type="text" name="username"></p>
<p>密码:<input type="password" name="password"></p>
<p>验证码:<input type="text" name="code" maxlength="4"><img src="code.php" onclick="this.src='code.php?'+Math.random()" align="absmiddle"></p>
<p><input type="submit" value="登录"></p>
</form>
在表单中增加了一个验证码输入框,及一个验证码图片,通过javascript的Math.random()函数可以动态刷新验证码图片,避免重复暴力破解。
示例二:限制发邮件
在网站中一个常见的场景是限制非法用户恶意注册或向网站的用户大规模发送垃圾邮件或诈骗信件。这时可以使用验证码限制用户的操作。示例代码如下:
<form method="post" action="send_email.php">
<p>收件人:<input type="text" name="to"></p>
<p>主题:<input type="text" name="subject"></p>
<p>内容:<textarea name="content"></textarea></p>
<p>验证码:<input type="text" name="code" maxlength="4"><img src="code.php" onclick="this.src='code.php?'+Math.random()" align="absmiddle"></p>
<p><input type="submit" value="发送"></p>
</form>
在表单中增加了一个验证码输入框,及一个验证码图片,用户在发送邮件时需要输入验证码,验证通过以后才能进行发送操作。
以上是两个基本示例,实际开发中的应用还需要根据实际场景制定相应的策略,来保证验证码功能在网站中的应用效果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用PHP实现验证码功能 - Python技术站