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分钟. 摘选自网络: 文档概览 本 ...
随机推荐
- iOS:quartz2D绘图(处理图像,绘制图像并添加水印)
绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize siz ...
- Windows DiskPart工具使用
启动工具 diskpart 列出磁盘列表 list disk 选择磁盘 select disk 1 转换为GPT分区 convert gpt 列出分区 list partition 清除所有分区 cl ...
- 入门教程: JS认证和WebAPI
转自:http://www.jianshu.com/p/fde63052a3a5 本教程会介绍如何在前端JS程序中集成IdentityServer.因为所有的处理都在前端,我们会使用一个JS库oidc ...
- 30分钟Git命令“从入门到放弃”
git 现在的火爆程度非同一般,它被广泛地用在大型开源项目中,但是初学者非常容易“从入门到放弃”,各种命令各种参数,天哪,宝宝要吓哭了.实际上新手并不需要了解所有命令的用途,学习是需要一个循序渐进的过 ...
- ini配置文件的读取
.ini 文件是Initialization File的缩写,即初始化文件.是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理 ...
- Linux 变量引用和命令替换
1.变量引用 name=Andy echo $name 或 echo ${name} 2.命令替换 把命令的执行结果赋值给变量,使用倒引号或者$() APP_HOME=`pwd` 或 APP_HOME ...
- mysql结构相同的三张表查询一条记录\将一张表中的数据插入另外一张表
将一张表中的数据插入另外一张表 1.两张表结构相同 insert into 表1名称 select * from 表2名称 2.两张结构不相同的表 insert into 表1名称(列名1,列名2,列 ...
- PHP的抽象类、接口的区别和选择[转载]
区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可 ...
- C#计算时间间隔的方法小结
初始化两个时间变量用于演示实例. DateTime dt1 = new DateTime(2013, 10, 13, 19, 15, 50); DateTime dt2 = new DateTime( ...
- hdu 4568 Hunter bfs建图+TSP状压DP
想AC的人请跳过这一段... 题目应该都能读懂.但是个人觉得这题出的很烂,意思太模糊了. 首先,进出次数只能是一次!!这个居然在题目中没有明确说明,让我在当时看到题目的时候无从下手. 因为我想到了这几 ...