zoukankan      html  css  js  c++  java
  • 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

     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>
  • 相关阅读:
    body标签中l的相关标签
    PostgreSQL&PostGIS完全安装
    PostgreSQL常用函数
    Linux 路由 学习笔记 之一 相关的数据结构
    OSPF学习中的问题
    对TCP重传的进一步认识
    TCP 接收窗口自动调节
    [转]struct 用法深入探索
    Memcached缓存瓶颈分析
    C++的try_catch异常
  • 原文地址:https://www.cnblogs.com/Jacklovely/p/6051346.html
Copyright © 2011-2022 走看看