关于thinkphp3.2.2验证码的使用详解及问题说明

浏览:7443 发布日期:2014/11/14 分类:技术分享 关键字: 验证码
首先声明我也是个新手
没事的时候玩一下thinkphp在验证码这块碰到了问题,在论坛里爬了一阵并没有找到解决办法,(也许我没细心找),碰到的问题是验证码怎么验证都不对。
这个问题不单独讲了,我把验证码使用的详细步骤写出来吧,碰到此类问题的新手也好有个方向。
1在控制器里定义一个方法来生成验证码:
public function selfverify(){
$verify = new \Think\Verify($config);
$verify->entry();
}

2模板里面引用验证码:
<IMG onclick="this.src=this.src+'?'+Math.random()" src="{:U('login/selfverify')}" >
注:onclick="this.src=this.src+'?'+Math.random()"意思是点验证码是自已刷新一下.
注:src="{:U('login/selfverify')}" 意思是验证码图的地址是:login控制器下面的selfverify方法
注:src="{:U('login/selfverify')}" 可以用 src="__URL__/selfverify"来代替,效果是一样的

3验证码的校验
在应用的公共模块Application\Common\Common里面的function.php中或自已控制器内写一个校验方法:
function check_verify($code,$id=''){
$verify = new \Think\Verify();
return $verify->check($code,$id);
}
然后如果是公共模块里写的就用check_verify(strtolower($verifycode))
就可以判断验证码是否正确了。返回值是Boolean型。
如果是在自身控制器内写的就要写成$this->check_verify(strtolower($verifycode))
注:strtolower()是把所有字符转成小写的函数,因为thinkphp的验证码虽然显示的大写,
但是用给$verify->check传入值时要全转换成小写。
注:(我就是在这一步上面碰到的问题
如果只用数字或中文当然不会有这个问题,所以这个问题论坛里有些人碰到了有些人没碰到。)

大概看了一下thinkphp的verify类里面有个函数是用来加密验证码的
private function authcode($str)方法加过密,
并不是简单一次MD5加密,所以用读取SESSION的方法来对比就不是用个md5()能搞定的了。
如果非得用session来验证,各位可以再看看代码,自已再写个session验证函数吧。

能力有限,解理得不对的希望各位大神多多指点。
最佳答案
评论() 相关
后面还有条评论,点击查看>>