PHP学习模块之简单的数字验证码的实现

验证码因为通常和注册、登录等结合的比较紧,而单单只是生成一张验证码图片并没有什么大的用处,所以还是要和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 "验证码提交不正确!";
}
?>

猜你喜欢

转载自blog.csdn.net/sinat_35161044/article/details/81783629