知识点:

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. Redis的5个常见使用场景

    1.会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cache).用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持 ...

  2. all-oone-data-structure(好)

    哈哈,我用了HashMap, 双向链表,还有了HashSet来保存key的集合. 现在这道题目还只有 9.3%的AC率,难度为HardTotal Accepted: 9 Total Submissio ...

  3. android sdk下载SDK Platform失败记录

    在使用android sdk manager下载的时候会遇到 下载完毕后,你可能会出现如下图一样的错误,就算重复尝试多次依然无法正常安装 Downloading SDK Platform Androi ...

  4. (转)Scala中协变(+)、逆变(-)、上界(<:)、下界(>:)简单介绍

    看源码的时候看到: trait ExtensionId[T <: Extension] { 没见过这个符号啊<: Scala上界(<:)和下界(>:) 1) U >: T ...

  5. (转)nio 连网和异步 I/O

    连网和异步 I/O 概述 连网是学习异步 I/O 的很好基础,而异步 I/O 对于在 Java 语言中执行任何输入/输出过程的人来说,无疑都是必须具备的知识.NIO 中的连网与 NIO 中的其他任何操 ...

  6. 几个免费的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 ...

  7. 云计算之路-试用Azure:数据库备份压缩文件在虚拟机上的恢复速度测试

    测试环境:Windows Azure上海机房,虚拟机配置为大型(四核,7 GB 内存),磁盘情况见下图. 数据库备份压缩文件大于为12.0 GB (12,914,327,552 bytes),放置于T ...

  8. oc和swift混编 使用use_frameworks!后编译出错

    Swift项目中同时使用OC的库和Swift的库时,用CocoaPods导入时添加use_frameworks! 如果在cocoapods 里面不使用use_frameworks!,则是通过stati ...

  9. Unity3.5 GameCenter基础教程(转载)

    原地址: http://forum.unity3d.com/threads/116901-Game-Center-Support/page3 using UnityEngine; using Unit ...

  10. CAS 与 无锁队列

    http://coolshell.cn/articles/8239.html http://www.tuicool.com/articles/VZ3IBv http://blog.csdn.net/r ...