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分钟. 摘选自网络: 文档概览 本 ...
随机推荐
- Redis的5个常见使用场景
1.会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cache).用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持 ...
- all-oone-data-structure(好)
哈哈,我用了HashMap, 双向链表,还有了HashSet来保存key的集合. 现在这道题目还只有 9.3%的AC率,难度为HardTotal Accepted: 9 Total Submissio ...
- android sdk下载SDK Platform失败记录
在使用android sdk manager下载的时候会遇到 下载完毕后,你可能会出现如下图一样的错误,就算重复尝试多次依然无法正常安装 Downloading SDK Platform Androi ...
- (转)Scala中协变(+)、逆变(-)、上界(<:)、下界(>:)简单介绍
看源码的时候看到: trait ExtensionId[T <: Extension] { 没见过这个符号啊<: Scala上界(<:)和下界(>:) 1) U >: T ...
- (转)nio 连网和异步 I/O
连网和异步 I/O 概述 连网是学习异步 I/O 的很好基础,而异步 I/O 对于在 Java 语言中执行任何输入/输出过程的人来说,无疑都是必须具备的知识.NIO 中的连网与 NIO 中的其他任何操 ...
- 几个免费的DNS地址
百度CDN 180.76.76.76 114.114.114.114 阿里CDN 223.5.5.5 223.6.6.6 googleCDN 8.8.8.8 国内外DNSserver地址列表 http ...
- 云计算之路-试用Azure:数据库备份压缩文件在虚拟机上的恢复速度测试
测试环境:Windows Azure上海机房,虚拟机配置为大型(四核,7 GB 内存),磁盘情况见下图. 数据库备份压缩文件大于为12.0 GB (12,914,327,552 bytes),放置于T ...
- oc和swift混编 使用use_frameworks!后编译出错
Swift项目中同时使用OC的库和Swift的库时,用CocoaPods导入时添加use_frameworks! 如果在cocoapods 里面不使用use_frameworks!,则是通过stati ...
- Unity3.5 GameCenter基础教程(转载)
原地址: http://forum.unity3d.com/threads/116901-Game-Center-Support/page3 using UnityEngine; using Unit ...
- CAS 与 无锁队列
http://coolshell.cn/articles/8239.html http://www.tuicool.com/articles/VZ3IBv http://blog.csdn.net/r ...