php_mvc实现步骤九(登录验证码,退出-登录标记)
shop34-17-登录验证码
验证码的分析
登录:防止暴力破解
论坛:防止灌水水
展示类:被抓取。
需要技术:
图片处理技术。
会话session技术。
PHP图片处理技术 – GD
具体操作步骤
开启GD扩展
Apache restart
场景:
制作500×300的绿色图片
创建画布
画布,一种资源型数据。可以操作的图像资源。
创建新画布(新建)
ImageCreate(宽,高),创建基于调色板的画布。
imageCreateTrueColor(宽,高);创建真彩色的画布。
基于图片创建画布(打开)
imageCreateFromJPEG(图片地址);
imageCreateFromPNG(图片地址);
imageCreateFromGIF(图片地址);
操作画布
分配颜色:如果需要在画布上使用某个颜色,应该先将颜色分配到画布上。
使用函数:
颜色标识 = imageColorAllocate(画布,R,G,B);
颜色的表示方式:
RGB
填充画布:将填充点,连续并且颜色相同的点进行填充(替换)
使用函数:
imageFill(画布, 填充位置x, 填充位置Y,颜色标识)完成
位置采用坐标进行管理:
原点:0,0,画布的左上角。
向右,x轴增加,向下Y轴增加。
右下角坐标:width-1,height-1
输出画布
将画布中处理好的图样信息,输出出来。
典型的:
1输出到图片文件。
2直接输出。
使用函数:
imagePNG(画布[, 文件地址]):
imageJPEG();
imageGIF();
如果没有第二个参数,表示直接输出。
如果直接输出到浏览器,需要告知浏览器,响应数据的类型应该是PNG格式的图片:
使用指令Content-type
tip:一个画布可以输出多次,输出为各种格式!
销毁画布资源
imageDestroy();
项目中实现验证码
验证码工具类
Framework/tool/Captcha.class.php
自动加载:
生成验证码图片:
Session开启重复避免:
背景图位置:
登录表单时展示
在登录表单页面,通过IMG标签,请求生成图片的URL地址,展示图片。
<img src=”URL” />
增加一个动作,用于完成生成后台登录界面的验证码图片:
Back/AdminController->captchaAction();
页面的img标签的src属性,请求该动作:
Tip:如果图片显示失败,如何调试?
应该直接请求生成图片的地址,而不是在img标签中查看。
我的程序,应该将captchaAction()也列为登入认证例外:
后台的平台控制器:
结果:
点击更换:
通过点击事件,对生产验证码图片的地址重新请求,形成新的验证码,进行展示!
如果img标签的src属性被更改,则浏览器会对新的url进行请求,展示在img图片区域内。
验证管理员信息前验证
在验证管理员信息的合法性前,对验证码作出验证:
Back/AdminController->checkAction();
增加验证码工具类Captcha的方法
checkCaptcha()
Back/AdminController->checkAction();
利用上面的方法完成验证:
tip:图片程序错误解析
step1: 请求生成图片的URL
语法错误:
逻辑错误:
此时,如果出现语法错误,页面会有相应的提示。
但是没有语法错误,就如上面的结果,提示图片内部错误无法显示:
Step2:将header(‘Content-Type:image/jpeg’)注释
解决即可!
图片不能展示的原因:额外输出
BOM:utf-8编码文件的签名,三个字节的隐藏字符。也是输出的!
shop34-18-退出-登录标志
退出
销毁登录标志,
Session中存储的is_login
控制器-动作
修改top模板,请求到退出动作:
登录标志
通常还具有存储当前登录用户(管理员)信息的功能!
在 存储登录标志时,获取当前管理员信息,存储到session中:
Back/AdminController->checkAction();
需要back/AdminModel->check()方法,返回的为管理员信息(合法情况下):
在back/PlatformController->_checkLogin()中验证管理员是否登录时,使用admin下标:
退出时,销毁的也是该标志:
Back/AdminController->logoutAction();
页面上可以获取管理员信息:
Back/top.html中,显示:你好 管理员!