1,验证码
在ThinkPHP中已经封装好了验证码类,放到 ThinkPHP/Extends/Library/ORG/Util/ 保存的是tp框架给我们封装好的一些类
如何使用这个验证码类:
(1)加载类库
之前说加载一个文件 require require_once()
TP使用import() 这个方法有一个特点:
直接找到当前的类库目录
在ThinkPHP中,有一个基类类库(ThinkPHP目录下面的Library目录)
同时还有一个当前项目的类库:项目的Lib目录
注意:在import方法中,以 .号代替 /
通过观察这个类库,我们发现这个类的方法大部分都是静态方法,根据之前复习的类与对象,只能通过类来调用静态方法
(2)实例化对象
(3)调用对象的方法
主要说一下验证码类的参数:
参数1,验证码的长度 字符个数
参数2,验证码的模式,以阿拉伯数字标记的,1代表生成的是数字类型的验证码,2,大写字母;3,小写字母;4,大小写混合;5,数字,大写,小写混合的验证码
(2)如何生成中文验证码
需要调用封装好的GBVerify()这个方法,但是需要保证类库中有中文字体
字体类型保存在 C/Windows/font\
(3)如何验证验证码是否正确
1,验证码为什么要保存到session中?
跨页面访问肯定要设计到数据的传输,从一个页面条到另外一个页面
$_GET $_POST
还可以通过session保存,session是保存到服务器端的
在TP框架中,验证码也是保存到session中的,如何访问这个验证码呢?
$verifyName 就是保存到session中的验证码名称
$_SESSION[‘verify’]
2,而且该验证码还是通过MD5加密的
因为session中的验证码已经加密,如果提交过来的验证码不md5加密的话,会提示验证码错误
代码:
public function verify(){
import('ORG.Util.Image');//加载类库
ob_end_clean();//不出图片,添上就出了
Image::buildImageVerify();
//Image::GBverify();//生成中文验证码,在Image.class.php中文验证码那改成想要的字体,把字体复制到与它同级目录下
}
//验证码验证案例,点击刷洗沿着码
public function reg(){
$this->display();
}
public function validate(){
if($_SESSION['verify'] !=md5($_POST['verify'])){//因为session中的验证码已经加密,如果提交过来的验证码不md5加密的话,会提示验证码错误,$_SESSION['verify']中的verify并不是因为验证码框的name是verify,session保存的是verify函数,
$this->error('验证码不正确','__URL__/reg');
}else{
$this->success('正确','__URL__/reg');
}
}
<form action='__APP__/Admin/Common/validate' method='post'>
用户名:<input type='text' name='username'><br>
密码:<input type='password'name='password'><br>
验证码:<input type='text' name='verify'><img src='__URL__/verify' style="cursor:pointer" onclick='shua(this)'><!--引入验证码__APP__/Common--><br>
<input type='submit'>
</form>
<script>
function shua(obj){
obj.src='__URL__/verify/random/'+Math.random();//点击刷新,重新加载验证码文件
}
</script>