拜读了版块内各位大神给出的建议,发现thinkPHP的验证方法会在第一次验证成功(验证码输入正确)后,自动销毁SESSION中的验证码信息(这点我好像没有在官方手册中看到),这样的话,在提交表单后,session中已经没有验证码的信息了,所以第二次验证的代码你怎么改它不会成功。因此,如果需要二次验证,则需要在前一次验证的方法中传入array('reset'=>false)参数(因为Verify这个类中有这个属性,默认值是true),这样处理以后,验证码在SESSION中的信息不会被销毁,以便于二次验证。下面是”我的代码“(代码都是抄版里众神们的,我这人有点不要脸):
实例化Verify,生成验证码的方法
public function vcode(){
ob_clean();
$Verify = new \Think\Verify();
$Verify->fontSize = 14;
$Verify->length = 4;
$Verify->useNoise = false;
$Verify->codeSet = '0123456789';
$Verify->imageW = 100;
$Verify->imageH = 34;
$Verify->entry();
}ajax验证,用在输入框触发onpublic function checkAjaxVerify(){
if(!IS_AJAX) $this->error('非法请求');
$code = I('code');
$verify = new \Think\Verify(array('reset'=>false));//加入array('reset'=>false)以便于后台再次验证
if($verify->check($code)){
echo 1;
}else{
echo 0;
}下面是提交表单后在控制器中的方法:public function dologin(){
if(!IS_POST){
E("页面不存在");
}
$code = I('post.logincode');
dump($code);
dump($_SESSION);
$verify = new \Think\Verify();
if(!$verify->check($code)){
$this->error('验证码错误','',15);
}
$sdb = M('administrator');
$username = $_POST['loginid'];
$userpass = $_POST['loginpass'];
$condition['aaccount'] = $username;
$condition['apass'] = $userpass;
$condition['arole'] = 1;
$result = $sdb->field('id,arole')->where($condition)->find();
if(!$result){
$this->error('没有这个用户','',5);
}else{
$_SESSION['userid'] = $result['id'];
$_SESSION['username'] = $username;
$_SESSION['userpass'] = $userpass;
$_SESSION['userrole'] = $result['arole'];
$this->success('登录成功',U('Index/index'),15);
}
} 最佳答案