验证码 - 绘图技术

作用?
防治计算机程序,向服务器发出请求从而达到恶意的目的:
例如:
登陆界面:暴力破解!
论坛:灌水,刷帖!
被采集:
特点,快!
提升 计算机请求的成本(时间,准确率)。
计算机技术不能成本很低从 图片上识别信息!
使用 表单中 增加验证码的方式,方式 计算机恶意请求服务器!
在这里插入图片描述
实现技术:
生成图片技术!
验证时:将码值存储与session中!
测试:
PHP绘图技术:图像处理技术
使用 GD 扩展完成!
加载扩展
Php.ini
在这里插入图片描述
Apache httpd restart
在这里插入图片描述
在这里插入图片描述
处理图像的基本步骤。
例如:制作500*250 的 蓝色图片!

创建画布资源
创建新的画布:
画布资源 = Imagecreate(宽,高);创建基于调色板画布(支持的颜色少)
画布资源 = Imagecreatetruecolor(宽,高);创建正彩色(支持的颜色多)
基于已有图像创建画布:
画布资源 = Imagecreatefromjpeg(图片地址);
Imagecreatefrompng();
Imagecreatefromgif();
测试:
在这里插入图片描述
操作画布
分配颜色:为某张画布分配某种颜色。
颜色的表示方式:RGB颜色。
颜色标识 = Imagecolorallocate(画布,颜色R, 颜色G, 颜色B)
#ff0000 红色
#000000 黑
#ffffff 白
在这里插入图片描述
填充画布:使用某个颜色,在画布的某个位置进行填充
Imagefill(画布,位置X,位置Y,颜色);
位置,采用坐标表示。
原点:左上角,0, 0
向右,X 增加
向下,Y 增加
右下角坐标:(width-1, height-1)
在这里插入图片描述
导出(输出)
是函数:
Imagepng(画布, 图片地址) 输出为PNG格式
Imagegif();
Imagejpeg()
完成
在这里插入图片描述
在这里插入图片描述
直接输出(到浏览器端)
如果不使用个第二个参数,表示直接输出
在这里插入图片描述
需要,告知浏览器,所输出的为图片,否则浏览器会将所有的响应内容当作html代码字符串处理!
在这里插入图片描述
销毁资源
在这里插入图片描述
仿照ecshop完成验证码
特征:
点击更换
图片背景更换(在有限几张背景图片中选择背景)
码值:大写字母+数字 随机组合!4个长度
文字颜色:白色或者黑色
文字,居中显示

处理码值
在这里插入图片描述
存储在session中
在这里插入图片描述
形成验证码图片
获取需要的背景图片:
在这里插入图片描述
拷贝项目中:
在这里插入图片描述
获得随机背景图片:
在这里插入图片描述
创建画布:
在这里插入图片描述
操作画布:
分配字符串颜色:
Imagecoloarallocate(画布,R, G, B);
在这里插入图片描述
将字符串写到画布上!
Imagestring(画布,字体大小,位置X, 位置Y,字符串内容,颜色);
字体大小:该函数使用内置字体。通过1-5表示字号。1小5大。
位置坐标,字符串左上角的坐标!
在这里插入图片描述
输出导出:
在这里插入图片描述
测试:
在这里插入图片描述
补充文件居中
图片宽高:
宽 = Imagesx(画布);
高 = Imagesy(画布);
内置字体的宽高:
imagefontWidth(字体);
imagefontHeight(字体);
字符串宽高:
在这里插入图片描述
项目中使用验证码
考虑到验证码功能,不仅一个项目一个功能要用,几乎所有的项目都要使用!
将验证码处理的代码,放置 项目框架目录中framework!
定义 验证码相关功能 的 工具类(扩展功能类)。
工具类:专门用于完成某一个功能类封装!
在framework建独立的目录存储工具类代码
在这里插入图片描述
处理该类文件的自动加载
处理 自动加载,将所有的框架基础类,与 类文件地址,做一个映射对应!

Index.php
在这里插入图片描述
实现生成验证码图片的方法
Framework/tool/Captcha.class.php

去掉长度,使用参数来充当:
在这里插入图片描述
Session开加@
在这里插入图片描述
图片地址问题:存储与工具目录!
在这里插入图片描述
在这里插入图片描述
Tip:
CAPTCHA项目是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称

使用工具类生成登陆页面验证码
在登陆表单模板中,使用img标签,请求可以生成验证码图片的URL地址,生成验证码!
Back/views/login.html
在这里插入图片描述
在这里插入图片描述
提供一个动作,处理该验证码图片请求:
完成该动作:
Back/AdminController->CaptchaAction();
在这里插入图片描述
测试:
在这里插入图片描述
处理错误后:
在这里插入图片描述
错误的处理
图片程序很多时候不会报告错误!
解决方案:
一:直接请求生成图的URL
在这里插入图片描述
结果,跳转到了Login动作,可以,判断了没有登陆而跳转:
可见:该动作也是特例:
解决:
Back/PlatformContorller->_check();
在这里插入图片描述
在这里插入图片描述
二:如果图片请求出现:
在这里插入图片描述
将 header(‘Content-Type: image/jpeg’)注释上!
在这里插入图片描述
此时:
在这里插入图片描述
三:编码不规范,导致存在额外的输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
建议(要求):写PHP程序,所有的程序文件,保证PHP标记要开头!而且同时不要写结束标记!
四:BOM,取消掉
UTF-8文件的签名。
在这里插入图片描述
实现验证码工具类验证码校验方法
Framework/tool/Captcha.class.php
在这里插入图片描述
验证码使用完要销毁!切记!
校验验证码是否正确
提交登录表时,back/AdminController->CheckLoginAction();
通过调用验证码工具类的校验功能,得到校验结果!
在这里插入图片描述
注意:跳转后一定要强制停止脚本。

点击更换验证码
在点击图片时,重写请求生成验证码的动作。

语法实现:
Onclick:事件
执行更改当前图片img元素的src属性,此时浏览器就会发出新的请求。
Back/view/login.html
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值