博客文章已转移到新地址,本地址暂时保留,新文章仅在新地址更新。[置顶]

tp简单验证码

作者:小宝 2017-06-12 12:06:01

经常需要利用验证码进行初步验证,比如登录、注册、留言版等都需要验证码,放置某些机器恶意填写无数表单提交,导致数据库被消耗或者网站资源被消耗,严重的还导致用户数据丢失被盗等。而验证码可以一定程度上减少恶意攻击的行为。

thinkphp提供了验证码类,可以很方便地实现和调用。下面是一个简单的tp验证码栗子:

<?php
namespace Home\Controller;
use Think\Controller;
class VerifyController extends Controller {
//生成验证码
public function index(){
$Verify = new \Think\Verify();
$Verify->fontSize = 25;//字体大小
$Verify->length = 4;//长度
$Verify->reset = ture;//是否重置
$Verify->useNoise = false;//是否关闭像素点
$Verify->entry();//显示
}
//检测验证码
function check_verify($code, $id = ''){ 
$config = array(
                'reset' => ture, // 验证成功后是否重置,—————这里才是有效的。
            );
            $verify = new \Think\Verify($config);
            if($verify->check($code, $id)){
                $data=1;
                $this->ajaxReturn($data);
            }else{
                $data=2;
                $this->ajaxReturn($data); 
            } 
$verify = new \Think\Verify();
return $verify->check($code, $id);
}
}
//以下是js部分,用来点击刷新验证码、验证验证码,利用了ajax方式验证

<script type="text/javascript">
  $("#Verify").click(function() {
  var verifyURL = "<?php echo U('/Home/Verify/');?>";
  var time = new Date().getTime();
  $("#Verify").attr({
     "src" : verifyURL 
  });
});
$("#code").blur(function() {
   $.post("<?php echo U('/Home/Verify/check_verify');?>", {
       code : $("#code").val()
       }, function(data) {
       if (data !== 1) {
           //验证码输入不正确
           alert("验证码错误。");            
       } 
   });
});
</script>
在页面调用验证码:

<img src="{:U('/Home/Verify/')}" alt="验证码" title="刷新" id="Verify" name="code">

验证码错误解决:

如果验证码输入正确而又提示错误,那么就是可能是你的session没有开启了。因为tp的验证码类利用了session,关闭了就不行了。默认情况下TP的'SESSION_AUTO_START' =>true,是开启session的,我已经在配置里面设置为false。所以无法生成session,每次ajax返回的date都是2,这就是为什么验证码输入正确而提示错误的原因。解决也很方便,在登录页面或者直接在入口文件加入session_start();即可。

©BRISKLAN;备案信息:桂ICP备16004757号-1