知识点:

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

  1. <?php
  2. session_start();
  3. $vstring = $_SESSION["vstring"];
  4. $vcode = $_GET["vcode"];
  5. $username = $_GET["username"];
  6. //$password = $_GET["password"];
  7. // echo "$username";
  8. // echo "$password";
  9. // echo "$vcode";
  10. echo($vstring);
  11. //验证码全部转大写
  12. $vcode = strtoupper($vcode);
  13. $vstring = strtoupper($vstring);
  14. if ($vcode==$vstring) {
  15. echo "验证码正确!";
  16. //js重定向
  17. echo "<script>location='http://www.baidu.com'</script>";
  18. }else{
  19. echo "验证码错误!";
  20. echo "<script>location='zhuce.php'</script>";
  21. }
  22.  
  23. ?>

yanzhengma.php

  1. <?php
  2. //开启session
  3. session_start();
  4. // ob_clean();
  5. header("content-type:image/png");
  6. $width = 110;
  7. $height = 40;
  8. $img = imagecreatetruecolor($width, $height);
  9. //$string = "hello";
  10. //7种颜色,存入数组
  11. $red = imagecolorallocate($img, 255, 0, 0);
  12. $white = imagecolorallocate($img, 255, 255, 255);
  13. $green = imagecolorallocate($img, 0, 255, 0);
  14. $blue = imagecolorallocate($img, 0, 0, 255);
  15. $aaa = imagecolorallocate($img, 255, 255, 0);
  16. $bbb = imagecolorallocate($img, 0, 255, 255);
  17. $ccc = imagecolorallocate($img, 255, 0, 255);
  18. $colors = array($white,$red,$green,$blue,$aaa,$bbb,$ccc);
  19. //颜色换成随机组成的RGB,每次循环都生成一次
  20. $color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
  21. //画点
  22. for ($i=0; $i < 10; $i++) {
  23. $color1 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
  24. imagesetpixel($img, mt_rand(0,$width), mt_rand(0,$height), $color1);
  25. }
  26. //划线
  27. for ($i=0; $i < 4; $i++) {
  28. $color2 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
  29. imageline($img, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $color2);
  30. }
  31. //生成4位验证码
  32. $a1 = range(0, 9);
  33. $a2 = range(a, z);
  34. $a3 = range(A, Z);
  35. $a4 = array_merge($a1,$a2,$a3);
  36. //改用shuffle打断顺序,array_slice取出前4个字母数字。不然如果用mt_rand在循环中每次取一个,还要生成字符串,不好比对
  37. shuffle($a4);
  38. $a5 = array_slice($a4,0,4);
  39. $a6 = implode('', $a5);
  40. //把验证码存到session
  41. $_SESSION['vstring'] = $a6;
  42. $num = 4;
  43. $fontsize = 20;
  44. for ($i=0; $i < 4; $i++) {
  45. $color3 = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
  46. imagettftext($img, $fontsize, mt_rand(-30,30), $width/$num*$i+5, 30, $color3, "Fonts/msyh.ttf", $a5[$i]);
  47. }
  48. imagepng($img);
  49. ?>

zhuce.php

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>注册</title>
  6. </head>
  7. <body>
  8. <form action="test.php" method = "get">
  9. <table>
  10. <tr>
  11. <td>用户名:</td>
  12. <td><input type="textarea" name="username" runat="server"><br/></td>
  13. </tr>
  14. <tr>
  15. <td>密码:</td>
  16. <td><input type="password" name="password"><br/></td>
  17. </tr>
  18. <tr>
  19. <td>验证码:</td>
  20. <td><input type="text" name = "vcode" runat="server"><br/></td>
  21. </tr>
  22. <tr>
  23. <td></td>
  24. <td align="center" valign="center"><img src="yanzhengma.php" id = "yanzhengma" ></form></td>
  25. </tr>
  26. <tr>
  27. <td><input type="submit" value="提交" ></td>
  28. </tr>
  29. <tr>
  30. <td><input type="reset" value="重置"></td>
  31. </tr>
  32. </table>
  33. <?php
  34. $var = '
  35. <script type="text/javascript">
  36. onload = function(){
  37. var yanzhengma = document.getElementById("yanzhengma");
  38. yanzhengma.onclick = function(){
  39. this.src = "yanzhengma.php?"+Math.random();
  40. };
  41. }
  42. </script>
  43. ';
  44. echo $var ?>
  45. </body>
  46. </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. iOS:quartz2D绘图(处理图像,绘制图像并添加水印)

    绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize siz ...

  2. Windows DiskPart工具使用

    启动工具 diskpart 列出磁盘列表 list disk 选择磁盘 select disk 1 转换为GPT分区 convert gpt 列出分区 list partition 清除所有分区 cl ...

  3. 入门教程: JS认证和WebAPI

    转自:http://www.jianshu.com/p/fde63052a3a5 本教程会介绍如何在前端JS程序中集成IdentityServer.因为所有的处理都在前端,我们会使用一个JS库oidc ...

  4. 30分钟Git命令“从入门到放弃”

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目中,但是初学者非常容易“从入门到放弃”,各种命令各种参数,天哪,宝宝要吓哭了.实际上新手并不需要了解所有命令的用途,学习是需要一个循序渐进的过 ...

  5. ini配置文件的读取

    .ini 文件是Initialization File的缩写,即初始化文件.是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理 ...

  6. Linux 变量引用和命令替换

    1.变量引用 name=Andy echo $name 或 echo ${name} 2.命令替换 把命令的执行结果赋值给变量,使用倒引号或者$() APP_HOME=`pwd` 或 APP_HOME ...

  7. mysql结构相同的三张表查询一条记录\将一张表中的数据插入另外一张表

    将一张表中的数据插入另外一张表 1.两张表结构相同 insert into 表1名称 select * from 表2名称 2.两张结构不相同的表 insert into 表1名称(列名1,列名2,列 ...

  8. PHP的抽象类、接口的区别和选择[转载]

    区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可 ...

  9. C#计算时间间隔的方法小结

    初始化两个时间变量用于演示实例. DateTime dt1 = new DateTime(2013, 10, 13, 19, 15, 50); DateTime dt2 = new DateTime( ...

  10. hdu 4568 Hunter bfs建图+TSP状压DP

    想AC的人请跳过这一段... 题目应该都能读懂.但是个人觉得这题出的很烂,意思太模糊了. 首先,进出次数只能是一次!!这个居然在题目中没有明确说明,让我在当时看到题目的时候无从下手. 因为我想到了这几 ...