知识点:

1. session获取其他页面的变量:

(1)先在画验证码php里开启session_start(),$_SESSION['随便起名']=验证码字符串,

(2)再在submit提交到action里的php里,开启session_start(),$str = $_SESSION['刚才随便起的名'],这样这个$str就等于验证码php里的‘验证码字符串’了,相当于用session中间过度了一下。

(3)然后与get得到的输入框里的验证码比较。

2. 两个验证码同时转大写。

3. 把数组里的验证码4个字母转成字符串,implode('',$arr)。

4. js的location重定向。

test.php

 <?php
session_start();
$vstring = $_SESSION["vstring"];
$vcode = $_GET["vcode"];
$username = $_GET["username"];
//$password = $_GET["password"];
// echo "$username";
// echo "$password";
// echo "$vcode";
echo($vstring);
//验证码全部转大写
$vcode = strtoupper($vcode);
$vstring = strtoupper($vstring);
if ($vcode==$vstring) {
echo "验证码正确!";
//js重定向
echo "<script>location='http://www.baidu.com'</script>";
}else{
echo "验证码错误!";
echo "<script>location='zhuce.php'</script>";
} ?>

yanzhengma.php

 <?php
//开启session
session_start();
// ob_clean();
header("content-type:image/png");
$width = 110;
$height = 40;
$img = imagecreatetruecolor($width, $height);
//$string = "hello";
//7种颜色,存入数组
$red = imagecolorallocate($img, 255, 0, 0);
$white = imagecolorallocate($img, 255, 255, 255);
$green = imagecolorallocate($img, 0, 255, 0);
$blue = imagecolorallocate($img, 0, 0, 255);
$aaa = imagecolorallocate($img, 255, 255, 0);
$bbb = imagecolorallocate($img, 0, 255, 255);
$ccc = imagecolorallocate($img, 255, 0, 255);
$colors = array($white,$red,$green,$blue,$aaa,$bbb,$ccc);
//颜色换成随机组成的RGB,每次循环都生成一次
$color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
//画点
for ($i=0; $i < 10; $i++) {
$color1 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
imagesetpixel($img, mt_rand(0,$width), mt_rand(0,$height), $color1);
}
//划线
for ($i=0; $i < 4; $i++) {
$color2 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
imageline($img, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $color2);
}
//生成4位验证码
$a1 = range(0, 9);
$a2 = range(a, z);
$a3 = range(A, Z);
$a4 = array_merge($a1,$a2,$a3);
//改用shuffle打断顺序,array_slice取出前4个字母数字。不然如果用mt_rand在循环中每次取一个,还要生成字符串,不好比对
shuffle($a4);
$a5 = array_slice($a4,0,4);
$a6 = implode('', $a5);
//把验证码存到session
$_SESSION['vstring'] = $a6;
$num = 4;
$fontsize = 20;
for ($i=0; $i < 4; $i++) {
$color3 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
imagettftext($img, $fontsize, mt_rand(-30,30), $width/$num*$i+5, 30, $color3, "Fonts/msyh.ttf", $a5[$i]);
}
imagepng($img);
?>

zhuce.php

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="test.php" method = "get">
<table>
<tr>
<td>用户名:</td>
<td><input type="textarea" name="username" runat="server"><br/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"><br/></td>
</tr>
<tr>
<td>验证码:</td>
<td><input type="text" name = "vcode" runat="server"><br/></td>
</tr>
<tr>
<td></td>
<td align="center" valign="center"><img src="yanzhengma.php" id = "yanzhengma" ></form></td>
</tr>
<tr>
<td><input type="submit" value="提交" ></td>
</tr>
<tr>
<td><input type="reset" value="重置"></td>
</tr>
</table>
<?php
$var = '
<script type="text/javascript">
onload = function(){
var yanzhengma = document.getElementById("yanzhengma");
yanzhengma.onclick = function(){
this.src = "yanzhengma.php?"+Math.random();
};
}
</script>
';
echo $var ?>
</body>
</html>

PHP学习笔记(8)验证码使用session对比的更多相关文章

  1. Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

    简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...

  2. Java NIO学习笔记九 NIO与IO对比

    Java NIO与IO Java nio 和io 到底有什么区别,以及什么时候使用nio和io,本文做一个比较. Java NIO和IO之间的主要区别 下表总结了Java NIO和IO之间的主要区别, ...

  3. 20160322 javaweb 学习笔记--response验证码实现

    package com.dzq.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; im ...

  4. YII学习笔记-登录后的session的总结

    在YII框架的默认的登录后的session数据是id,name,__states这三个数据. 在搭配好YII框架环境后,可以使用admin/admin,来登录系统.如果在protected/views ...

  5. Django学习笔记之Cookie、Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  6. NSURLSession学习笔记(二)Session Task

    Session Task分为三种Data Task,Upload Task,Download Task.毫无疑问,Session Task是整个NSURLSession架构的核心目标. 下面写了一个简 ...

  7. jsp学习笔记 - 内置对象 session

    1.session 主要用来用户的登录和注销 设置用户名,获取用户名 session.setAttribute("username","johnson"); s ...

  8. SpringBoot学习笔记(13)----使用Spring Session+redis实现一个简单的集群

    session集群的解决方案: 1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomcat/ ...

  9. NodeJS学习笔记 进阶 (7)express+session实现简易身份认证(ok)

    个人总结: 这篇文章讲解了express框架中如何使用session,主要用了express-session这个包.更多可以参考npm.js来看,读完这篇文章需要10分钟. 摘选自网络: 文档概览 本 ...

随机推荐

  1. xpages开发的bom管理系统

    domino对流程设计是方便的.假设制作复杂逻辑的应用就难了.可是还是能够实现的,曾经的一个bom管理系统.刚開始想使用java的ssh来做,后来为了统一平台.还是使用domino来做,经过长时间的研 ...

  2. [Todo] C++学习资料进度

    <C++必知必会> /Users/baidu/Documents/Data/Interview/C++

  3. jTemplates模板学习笔记

    1.jTemplates工作方式   1)setTemplateElement:指定可处理的模板对象 2)processTemplate:对模板化的对象进行数据处理 2.语法解析   1)jTempl ...

  4. 百度编辑器上传大视频报http请求错误怎么办

    百度编辑器UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,所以受到很多开放人员的青睐.但是有时 ...

  5. 【云计算】Docker容器时间同步如何配置?

    示例: # 3.8 配置时区.时钟同步 # configure timezone & ntp RUN echo ${TIME_ZONE} > /etc/timezone \ && ...

  6. 【云计算】使用nsenter进入Docker容器进行调试

    [nsenter安装使用] cd /tmp curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.t ...

  7. WindowManager.LayoutParams全解

    WindowManager是Android中一个重要的服务(Service ).WindowManager Service 是全局的,是唯一的.它将用户的操作,翻译成为指令,发送给呈现在界面上的各个W ...

  8. C# 字符串数组转换为整形数组

    /// <summary> /// 字符串数组转换整形数组 /// </summary> /// <param name="Content">字 ...

  9. json servlet通信 显示数据

    servlet //输出JSON格式的省份信息 @WebServlet("/ServletDemo1") public class ServletDemo1 extends Htt ...

  10. Bootstrap手动打开隐藏模态框

    开发的时候遇到一个bug,关闭模态框后背景灰色图层依旧还在.原来是用错了隐藏模态框的代码. 正确的调用方式如下: $("#id").modal("show"); ...