zoukankan      html  css  js  c++  java
  • php课程 8-30 实现验证码验证的难点是什么

    php课程 8-30 实现验证码验证的难点是什么

    一、总结

    一句话总结:session技术实现验证码传递。

    1、生成验证码的那个网页(php文件)中的验证码怎么搁到别的网页中去?

    直接在img的src中调用这个php的文件名即可
    因为这个php文件或者说网页文件本身就是一个图片(我们在html的head头里面声明了文件类型为图片的),
    所以直接用图片的方式引入即可,而不是引入文件的方式

    24         <p>验证码图片:</p>
    25         <p>
    26             <img src="verify.php" onclick="this.src='verify.php?rand='+Math.random()">    
    27         </p>

    2、怎么把验证码图片里面的验证码传递到后台,和用户输入的验证码做比较?

    生成验证码图片那个php把验证码写到文件中,后台的文件要比较验证码的时候直接去文件中扣就行。
    所以用的就是cookie和session,这里用的是session。

     1 <?php 
     2 
     3 session_start();
     4 
     5 $vauth=$_SESSION['vcode'];
     6 

    3、session的本质是什么(session为什么可以跨文件传输变量)?

    因为session是文本变量,也就是说session里面的变量都会在文件中放一份,取session的时候是取文件中取,所以session可以做到跨文件传输变量的值。
    其它的变量在脚本结束的时候,变量就被释放了。

    4、php原生的session使用有什么注意要点?

    a、使用session必须开启session,用session_start()
    b、session_start()开启session这句话之前不能有任何html输出(<?php?>之外都是html的天下)。

     1 <?php 
     2 
     3 session_start();
     4 
     5 $vauth=$_SESSION['vcode'];
     6 

    5、如何点一下验证码图片动态刷新验证码图片?

    onclick方法

    24         <p>验证码图片:</p>
    25         <p>
    26             <img src="verify.php" onclick="this.src='verify.php?rand='+Math.random()">    
    27         </p>

    6、为什么验证码图片刷新要加随机数作为参数?

    如果没有这个随机数作为参数,浏览器发现两次请求的是同一个url,会优先从自己的缓存里面取出内容

    24         <p>验证码图片:</p>
    25         <p>
    26             <img src="verify.php" onclick="this.src='verify.php?rand='+Math.random()">    
    27         </p>

    二、完整的验证码实例

    这里用的gd库的画字函数,所以要引入字体文件.ttf

    index.php

     1 <!doctype html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>用户注册页面</title>
     6     <style>
     7         *{
     8             font-family: 微软雅黑;
     9         }
    10         img{
    11             cursor: pointer;
    12         }
    13     </style>
    14 </head>
    15 <body>
    16     <h1>用户注册:</h1>
    17     <form action="reg.php" method='post'>
    18         <p>用户名:</p>
    19         <p><input type="text" name='username'></p>
    20 
    21         <p>密码:</p>
    22         <p><input type="password" name='password'></p>
    23     
    24         <p>验证码图片:</p>
    25         <p>
    26             <img src="verify.php" onclick="this.src='verify.php?rand='+Math.random()">    
    27         </p>
    28 
    29         <p>输入验证码:</p>
    30         <p><input type="text" name='fcode'></p>
    31 
    32         <p>
    33             <input type="submit" value='Ok'>
    34         </p>
    35     </form>    
    36 </body>
    37 </html>

    reg.php

     1 <?php 
     2 
     3 session_start();
     4 
     5 $vauth=$_SESSION['vcode'];
     6 
     7 $fauth=$_POST['fcode'];
     8 
     9 $vstr=strtolower(str_replace(' ','',$vauth));
    10 $fstr=strtolower(str_replace(' ','',$fauth));
    11 $username=$_POST['username'];
    12 
    13 if($vstr===$fstr){
    14     echo "验证码输入正确!";
    15 }else{
    16     echo "验证码输入错误!";
    17 }
    18  ?>

    verigy.php

     1 <?php 
     2 //开启session技术
     3 session_start();
     4 
     5 // 1.创建画布资源
     6 $img=imagecreatetruecolor(150,50);
     7 
     8 // 2.准备颜色
     9 $black=imagecolorallocate($img,0,0,0);
    10 $white=imagecolorallocate($img,255,255,255);
    11 $red=imagecolorallocate($img,255,0,0);
    12 $green=imagecolorallocate($img,0,255,0);
    13 $blue=imagecolorallocate($img,0,0,255);
    14 $gray=imagecolorallocate($img,180,180,180);
    15 
    16 // 3.填充画布
    17 imagefill($img,0,0,$black);
    18 
    19 $arr=array_merge(range(0,9),range(a,z),range(A,Z));
    20 shuffle($arr);
    21 $str=join(' ',array_slice($arr,0,4));
    22 
    23 $_SESSION['vcode']=$str;
    24 
    25 //画字
    26 imagettftext($img,20,0,20,35,$white,'ms.ttf',$str);
    27 
    28 //干扰素
    29 for($i=0;$i<30;$i++){
    30     imagearc($img,mt_rand(0,150),mt_rand(0,50),mt_rand(0,150),mt_rand(0,50),mt_rand(0,360),mt_rand(0,360),$white);
    31 }
    32 
    33 // 5.输出最终图像或保存最终图像
    34 header('content-type:image/png');
    35 
    36 // 图片从浏览器上输出
    37 imagepng($img);
    38 
    39 // 把图片保存到本地
    40 // imagejpeg($img,'jin.jpg');
    41 
    42 // 6.释放画布资源
    43 imagedestroy($img);
    44 
    45  ?>
     
  • 相关阅读:
    openssh的服务端配置文件
    SSH的端口转发
    ssh服务
    文件引入
    数据类型的转换
    作用域
    静态变量
    函数
    php嵌入html的解析过程
    PHP执行过程
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9288977.html
Copyright © 2011-2022 走看看