一、实例化生成验证码的类(该方法放到IndexController里面便于访问)
<?php
/**
*
* 验证码生成
*/
public function verify_c(){
$Verify = new \Think\Verify();
$Verify->fontSize = 18;
$Verify->length = 4;
$Verify->useNoise = false;
$Verify->codeSet = '0123456789';
$Verify->imageW = 130;
$Verify->imageH = 50;
//$Verify->expire = 600;
$Verify->entry();
}
?>
二、前台需要生成验证码的图片src属性指向
<div class="form-group">
<label for="password" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-4">
<input type="text" class="form-control" name='verify' id="verify" placeholder="验证码">
</div>
<span onclick="changeverify()"><img width="30%" height="50" alt="验证码" id='verifyimg' src="__CONTROLLER__/verify_c" title="点击刷新" style="cursor:pointer"></span>
</div>
三、写完上面的后,页面初始化的验证码就可以出现了,下面要写的就是点击验证码图片后,刷新出新的验证码图片(通过jquery修改图片的src属性来完成,请求的处理函数一样,只是在请求后加一个随机数,区别上一张图片的请求)
function changeverify(){
var verifyimg = $("#verifyimg").attr("src");
$("#verifyimg").attr("src", "__CONTROLLER__/verify_c/"+Math.random());
}
四、校验验证码输入是否正确
a.在common目录下的function.php里加入全局函数
<?php
/**
* 验证码检查
*/
function check_verify($code, $id = ""){
$verify = new \Think\Verify();
return $verify->check($code, $id);
}
?>
b.在表单提交的controller对应的处理方法里添加检查代码(登录验证)
public function dologin(){
//var_dump($_POST);
session_start();
$userName =$_POST['username'];
$passWord =$_POST['password'];
//根据username获取数据库中匹配的信息
$User = M('userd');//表名
$userInfo = $User->where('username="%s"',$userName)->find();
$verify = I('param.verify','');
$_SESSION['user']=$userName;
if($userName == $userInfo['username'] && md5(md5($passWord).$userInfo['salt']) == $userInfo['userpass']){
if(!check_verify($verify)){
// $this->error("亲,验证码输错了哦!",$this->site_url,9);
$this->assign('loginInfo','亲,验证码错了啊啊啊啊');
$this->tologin();
} else {
// redirect(U('User/Usercenter/index'));
$this->tobbs();
}
}else{
$this->assign('loginInfo','登录失败,用户名或密码错误');
$this->tologin();
}
}