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
<!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 实现验证码验证的难点是什么的更多相关文章
- laravel基础课程---14、表单验证(lavarel如何进行表单验证)
laravel基础课程---14.表单验证(lavarel如何进行表单验证) 一.总结 一句话总结: lavarel的验证的功能比tp要[简单]且[强大]很多 直接控制器中:添加[规则数组]和[修改提 ...
- 【ThinkPHP框架学习 】(1) --- thinkphp 3.2.3 验证码验证使用教程分享
框架版本:ThinkPHP框架 thinkphp 3.2.3 生成验证码 下面是最简单的方式生成验证码: $Verify = new \Think\Verify(); $Verify-> ...
- JFinal Web开发学习(六)验证码验证和注册细节
效果: 实现了注册界面的验证码验证.确认密码.密码md5加盐加密.C3P0插件数据库操作.读取外部配置文件. 1.在注册页面添加了确认密码输入框,修改了字段名称 <!DOCTYPE html&g ...
- Yii2在Form中处理短信验证码的Validator,耦合度最低的短信验证码验证方式
短信验证码在目前大多数web应用中都会有,本文介绍一个基于Yii2 Validator方式的验证码验证方式. 在其他文章中看到的方式大多比较难做到一次封装,多次重用. 使用此方式的好处自然不用多说,V ...
- PHP网站提交表单如何实现验证码验证功能
很多小伙伴在原生网站时候都会遇到很多意料之外的情况发生,也有不少小伙伴在初学程序代码的时候可能会因为一个小小的逗号隐藏在几百行,几千行的代码中出错常见的在提交表单中很多事需要验证码验证,那么如何来实现 ...
- 模拟用户登录,内含验证码验证和request等操作
模拟用户登录,内含验证码验证和jsp等操作 1.案例需求: 1. 访问带有验证码的登录页面login.jsp 2. 用户输入用户名,密码以及验证码. * 如果用户名和密码输入有误,跳转登录页面,提示: ...
- [技术博客] 用户验证码验证机制---redis缓存数据库的使用
目录 问题引入 初识redis 实际应用 作者:马振亚 问题引入 在这次的开发过程中,我们的需求中有一个是普通用户可以通过特定的机制申请成为社长.因为只有部分人才能验证成功,所以这个最开始想了两种思路 ...
- 由Nginx反向代理引出的JCaptcha验证码验证失败的问题
搜索关键字: 1)Windows本地开发正常,部署到Linux远程服务器上JCaptcha验证失败 2)Linux远程服务器上JCpatcha验证失败 3)Nginx反向代理后JCaptcha验证失败 ...
- PHP实现邮箱验证码验证功能
*文章来源:https://blog.egsec.cn/archives/623 (我的主站) *本文将主要说明:PHP实现邮箱验证码验证功能,通过注册或登录向用户发送身份确认验证码,并通过判断输入 ...
随机推荐
- eXtremeDB相关问题解答(3)
> 1. Could our database support multi-database under one single instance? > > 2. ...
- BRep Shapes Based on Tessellated Geometry
BRep Shapes Based on Tessellated Geometry eryar@163.com Key Words. BRep Shape, Tessellated Geometry, ...
- js---06函数传参数
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- es6 --- Generator 函数
第一部分,ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路, ...
- js闭包中注意文字总结
//闭包注意的点 //闭包中使用外部变量不是复制而是引用 //闭包可以节省传递参数问题 //在循环中使用闭包
- MATLAB 最优化计算 (一)
1,令多行命 —— 逗号 VS 分号 2,管理工作空间 —— who , whos , clear , save , load , length (向量显示其长度,矩阵显示行数与列数中的较大数) s ...
- Gym 100952 G. The jar of divisors
http://codeforces.com/gym/100952/problem/G G. The jar of divisors time limit per test 2 seconds memo ...
- Java中Webservice调用.NET天气接口生成客户端异常
学习webservice时候有个例子调用公网的天气预报接口实现查询天气的功能.然而在使用命令编译客户端代码的时候出错了.大概看了一下网上说是需要将将文件中所有出现的 < s:element re ...
- api h5 sdk 接入的说明
api 接入 :纯后台接入没有页面 h5接入: 有页面的接入 需要和客户交互 客户输入内容 sdk 接入:需要对方的sdk文件 植入文件
- 小米开源文件管理器MiCodeFileExplorer-源码研究(3)-使用最多的工具类Util
Util.java,使用最广泛~代码中很多地方,都写了注释说明~基本不需要怎么解释了~ package net.micode.fileexplorer.util; import java.io.Fil ...