验证码因为通常和注册、登录等结合的比较紧,而单单只是生成一张验证码图片并没有什么大的用处,所以还是要和session结合起来,对用户身份进行验证,而我今天这个就是利用session进行登录验证的,好了,废话不多说,先把知识讲一下。
session是一个会话变量,对应的超变量为$_SESSION,也是系统变量,在后面的例子中session主要是跨文件来存储验证码生成的信息,和用户输入的信息进行比较,对了session的使用要开启服务,使用session_start()函数。具体的回来我再总结,今天先到这里。
验证码产生的几个步骤:
1.创建画布
2.创建背景颜色
3.设置画布背景颜色
4.验证码内容的生成
5.设置干扰素
6.将验证码内容保存到$_SESSION中
7.输出图片
8.销毁图片
具体代码为:image_captcha.php
<?php
//保存到session上
session_start();
//用来存储数据
$captcha = "";
//创建画布
$image=imagecreatetruecolor(100,30);
//设置背景
$bgcolor=imagecolorallocate($image,255,0,0);
//填充背景颜色
imagefill($image,0,0,$bgcolor);
//实现数字
for($i=0;$i<4;$i++){
//定义字体
$fontsize=6;
//定义颜色
$fontcolor=imagecolorallocate($image,rand(1,120),rand(1,120),rand(1,120));
//定义内容
$fontcontent= rand(1,9);
$captcha .= $fontcontent;
//将内容画到画布上去
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
//设置干扰素
for($i=0;$i<200;$i++){
//设置颜色
$pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
imagesetpixel ($image,rand(1,99),rand(1,29),$pointcolor);
}
//保存到session中
$_SESSION["captcha"]=$captcha;
//输出图片
header("content-type:image/png");
imagepng($image);
//销毁照片
imagedestroy($img);
?>
相对应的HTML为login.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登陆</title>
</head>
<body>
<form action="login.php" method="post">
<img src="image_captcha.php" onclick="this.src='image_captcha.php?'+new Date().getTime();" width="100" height="30"><br/>
<input type="text" name="captcha" placeholder="请输入图片中的验证码"><br/>
<input type="submit" value="验证">
</form>
</body>
</html>
login.php
<?php
/**
* 接受用户登陆时提交的验证码
*/
session_start();
//1. 获取到用户提交的验证码
$captcha = $_POST["captcha"];
var_dump($_SESSION["captcha"]);
//2. 将session中的验证码和用户提交的验证码进行核对,当成功时提示验证码正确,并销毁之前的session值,不成功则重新提交
var_dump($captcha);
if(strtolower($_SESSION["captcha"]) == strtolower($captcha)){
echo "验证码正确!";
$_SESSION["captcha"] = "";
}else{
echo "验证码提交不正确!";
}
?>