搜索
系统检测到您的用户名不符合规范:

3.2.3版本验证码的问题解决方法

浏览:4798 发布日期:2016年02月07日 分类:技术分享 关键字: 3.2.3 验证码 ajax
我是一个初学者,PHP知识一知半解,但这并不妨碍我想学习的兴趣。可能有朋友跟我一样,纠结于3.2.3版本的验证码验证问题,重点在于二次验证,举个例子就是常见的登录页面上有个验证码输入框,当用户输入验证码并且鼠标点击在这个输入框之外时候,触发onblur事件,然后ajax到后台方法进行一次验证,并且将验证结果反馈给用户(alert什么的),正确之后提交表单到控制器方法中,又进行一次验证,而问题恰恰出现在这里,就是首次ajax验证的时候没有问题,但到了第二次验证的时候,无论如何无法成功。
拜读了版块内各位大神给出的建议,发现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验证,用在输入框触发onblur时public 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);
}
}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
6563420
积分:82 等级:LV0
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /