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

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册页面</title>
<style>
*{
font-family: 微软雅黑;
}
img{
cursor: pointer;
}
</style>
</head>
<body>
<h1>用户注册:</h1>
<form action="reg.php" method='post'>
<p>用户名:</p>
<p><input type="text" name='username'></p> <p>密码:</p>
<p><input type="password" name='password'></p> <p>验证码图片:</p>
<p>
<img src="verify.php" onclick="this.src='verify.php?rand='+Math.random()">
</p> <p>输入验证码:</p>
<p><input type="text" name='fcode'></p> <p>
<input type="submit" value='Ok'>
</p>
</form>
</body>
</html>

reg.php

 <?php 

 session_start();

 $vauth=$_SESSION['vcode'];

 $fauth=$_POST['fcode'];

 $vstr=strtolower(str_replace(' ','',$vauth));
$fstr=strtolower(str_replace(' ','',$fauth));
$username=$_POST['username']; if($vstr===$fstr){
echo "验证码输入正确!";
}else{
echo "验证码输入错误!";
}
?>

verigy.php

 <?php
//开启session技术
session_start(); // 1.创建画布资源
$img=imagecreatetruecolor(150,50); // 2.准备颜色
$black=imagecolorallocate($img,0,0,0);
$white=imagecolorallocate($img,255,255,255);
$red=imagecolorallocate($img,255,0,0);
$green=imagecolorallocate($img,0,255,0);
$blue=imagecolorallocate($img,0,0,255);
$gray=imagecolorallocate($img,180,180,180); // 3.填充画布
imagefill($img,0,0,$black); $arr=array_merge(range(0,9),range(a,z),range(A,Z));
shuffle($arr);
$str=join(' ',array_slice($arr,0,4)); $_SESSION['vcode']=$str; //画字
imagettftext($img,20,0,20,35,$white,'ms.ttf',$str); //干扰素
for($i=0;$i<30;$i++){
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);
} // 5.输出最终图像或保存最终图像
header('content-type:image/png'); // 图片从浏览器上输出
imagepng($img); // 把图片保存到本地
// imagejpeg($img,'jin.jpg'); // 6.释放画布资源
imagedestroy($img); ?>
 

php课程 8-30 实现验证码验证的难点是什么的更多相关文章

  1. laravel基础课程---14、表单验证(lavarel如何进行表单验证)

    laravel基础课程---14.表单验证(lavarel如何进行表单验证) 一.总结 一句话总结: lavarel的验证的功能比tp要[简单]且[强大]很多 直接控制器中:添加[规则数组]和[修改提 ...

  2. 【ThinkPHP框架学习 】(1) --- thinkphp 3.2.3 验证码验证使用教程分享

    框架版本:ThinkPHP框架     thinkphp 3.2.3 生成验证码 下面是最简单的方式生成验证码: $Verify = new \Think\Verify(); $Verify-> ...

  3. JFinal Web开发学习(六)验证码验证和注册细节

    效果: 实现了注册界面的验证码验证.确认密码.密码md5加盐加密.C3P0插件数据库操作.读取外部配置文件. 1.在注册页面添加了确认密码输入框,修改了字段名称 <!DOCTYPE html&g ...

  4. Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式

    短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,V ...

  5. PHP网站提交表单如何实现验证码验证功能

    很多小伙伴在原生网站时候都会遇到很多意料之外的情况发生,也有不少小伙伴在初学程序代码的时候可能会因为一个小小的逗号隐藏在几百行,几千行的代码中出错常见的在提交表单中很多事需要验证码验证,那么如何来实现 ...

  6. 模拟用户登录,内含验证码验证和request等操作

    模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...

  7. [技术博客] 用户验证码验证机制---redis缓存数据库的使用

    目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...

  8. 由Nginx反向代理引出的JCaptcha验证码验证失败的问题

    搜索关键字: 1)Windows本地开发正常,部署到Linux远程服务器上JCaptcha验证失败 2)Linux远程服务器上JCpatcha验证失败 3)Nginx反向代理后JCaptcha验证失败 ...

  9. PHP实现邮箱验证码验证功能

    *文章来源:https://blog.egsec.cn/archives/623  (我的主站) *本文将主要说明:PHP实现邮箱验证码验证功能,通过注册或登录向用户发送身份确认验证码,并通过判断输入 ...

随机推荐

  1. 中科燕园GIS外包--移动GIS

    移动GIS恰逢其时 得益于移动智能终端的普及和移动互联网的发展,伴随着GIS技术的发展和应用的深入.越来越多的企业和普通消费者開始体会到移动GIS的巨大潜力和价值. 移动GIS轻便灵活,受众面广.随时 ...

  2. js---16继承

    123 instanceof Number;//false,要左边是对象右边是函数 typeof 123 ; //number new Number(123) instanceof Number; / ...

  3. Scott Hanselman的问题-1

    Scott Hanselman的问题 .Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)   过去几年都在忙着找项目,赶项目,没有时间好好整理深究自己在工作中学到的东西. ...

  4. 【DRF路由】

    在urls.py文件中按照如下步骤写,即可正确使用DRF的内置路由. from .views import BookModel # 1. 导入我们的视图 from rest_framework.rou ...

  5. PHP 7.1安装xhprof进行性能分析

    安装扩展该 xhprof扩展版本是从 https://github.com/longxinH/xhprof 获取的(第三方的一个库,官方版本不支持php7) 下载并编译xhprof扩展在web的htm ...

  6. 洛谷 P3385 【模板】负环

    P3385 [模板]负环 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M ...

  7. Android仿Win8界面的button点击

    今天没事的时候,感觉Win8的扁平化的button还是挺好看的,就研究了下怎样在安卓界面实现Win8的扁平化button点击效果. 发现了一个自己定义的View能够实现扁平化button效果,话不多说 ...

  8. js08--函数1

    函数当成类看当成匿名对象看,都是跟java吻合的,只有当成函数看(函数自己可以执行)跟java区别在这里. function fact(){} var F = fact ; 函数名是函数对象的地址,是 ...

  9. 团队作业-Beta冲刺(1)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblo ...

  10. 【arc062e】Building Cubes with AtCoDeer

    Description STL有n块瓷砖,编号从1到n,并且将这个编号写在瓷砖的正中央: 瓷砖的四个角上分别有四种颜色(可能相等可能不相等),并且用Ci,0,Ci,1,Ci,2,Ci,3分别表示左上. ...