PHP学习笔记(8)验证码使用session对比

知识点:
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对比的更多相关文章
- Tensorflow学习笔记2:About Session, Graph, Operation and Tensor
简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...
- Java NIO学习笔记九 NIO与IO对比
Java NIO与IO Java nio 和io 到底有什么区别,以及什么时候使用nio和io,本文做一个比较. Java NIO和IO之间的主要区别 下表总结了Java NIO和IO之间的主要区别, ...
- 20160322 javaweb 学习笔记--response验证码实现
package com.dzq.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; im ...
- YII学习笔记-登录后的session的总结
在YII框架的默认的登录后的session数据是id,name,__states这三个数据. 在搭配好YII框架环境后,可以使用admin/admin,来登录系统.如果在protected/views ...
- Django学习笔记之Cookie、Session和自定义分页
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- NSURLSession学习笔记(二)Session Task
Session Task分为三种Data Task,Upload Task,Download Task.毫无疑问,Session Task是整个NSURLSession架构的核心目标. 下面写了一个简 ...
- jsp学习笔记 - 内置对象 session
1.session 主要用来用户的登录和注销 设置用户名,获取用户名 session.setAttribute("username","johnson"); s ...
- SpringBoot学习笔记(13)----使用Spring Session+redis实现一个简单的集群
session集群的解决方案: 1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomcat/ ...
- NodeJS学习笔记 进阶 (7)express+session实现简易身份认证(ok)
个人总结: 这篇文章讲解了express框架中如何使用session,主要用了express-session这个包.更多可以参考npm.js来看,读完这篇文章需要10分钟. 摘选自网络: 文档概览 本 ...
随机推荐
- 二十四种设计模式:迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern) 介绍提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 示例有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现 ...
- ylbtech-LanguageSamples-Porperties(属性)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Porperties(属性) 1.A,示例(Sample) 返回顶部 “属性”示例 本示 ...
- iOS:创建单例对象的两种方式
单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClas ...
- poj3592 Instantaneous Transference tarjan缩点+建图
//给一个n*m的地图.坦克从(0 , 0)開始走 //#表示墙不能走,*表示传送门能够传送到指定地方,能够选择也能够选择不传送 //数字表示该格的矿石数, //坦克从(0,0)開始走.仅仅能往右和往 ...
- Android传感器的介绍
在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用. #define SENSOR_TYPE_ACCELEROMETER 1 //加速度#de ...
- Windows Vista如何让梦幻桌面支持更多格式
Windows Vista 梦幻桌面(DreamScene)到底能不能支持除了Mpeg/mpg以外的格式? 很多人说梦幻桌面的视频格式有限,像AVI.RM.RMVB就不能做成梦幻桌面!也有很多朋友着急 ...
- 详解php的魔术方法__get()和__set()
先看看php官方文档的解释:__set() is run when writing data to inaccessible properties.__get() is utilized for re ...
- Cocos2d-x中如何增加图片和文本菜单
菜单都以MenuItem开头 MenuItemLabel - 文本菜单项 MenuItemImage - 图片菜单项 // on "init" you need to initia ...
- 实现toggleClass功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java设计模式(十) 备忘录模式 状态模式
(十九)备忘录模式 备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象. class Memento{ private String value; public Memento(Stri ...