魔法哈奇2官网给一个验证码

3.2.3版本验证码的问题解决方法 - ThinkPHP框架
我是一个初学者,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&=&&&
&&&&&&&&$Verify-&codeSet&=&'';&&
&&&&&&&&$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']&=&$
&&&&&&&&$condition['apass']&=&$
&&&&&&&&$condition['arole']&=&1;
&&&&&&&&$result&=&$sdb-&field('id,arole')-&where($condition)-&find();
&&&&&&&&if(!$result){
&&&&&&&&&&&&$this-&error('没有这个用户','',5);
&&&&&&&&}else{
&&&&&&&&$_SESSION['userid']&=&$result['id'];
&&&&&&&&$_SESSION['username']&=&$
&&&&&&&&$_SESSION['userpass']&=&$
&&&&&&&&$_SESSION['userrole']&=&$result['arole'];
&&&&&&&&$this-&success('登录成功',U('Index/index'),15);
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

参考资料

 

随机推荐