您的位置:首页 > 编程语言 > PHP开发

yii 验证码 CCaptcha的总结

2014-02-26 19:54 309 查看
今天用到yii的验证码 ccaptcha,经过在网上搜寻 找到以下例子:

1、在controller中加入代码

(1)启用

(2)添加进入规则

2、在model中加入代码

(1)声明

(2)加入属性

(3)加入过滤规则

3、在view中写代码



经过测试,老是报验证码错误,经过多方 查询

如果在 form中开启了,这两个

'enableAjaxValidation'=>true,

'enableClientValidation'=>true,

然后使用
'fixedVerifyCode'

=>
substr
(md5(time()),11,4),
会导致这个问题发生,在这篇文章中,有详细描述为什么会出现这个问题的原因:http://blog.163.com/wangzhenbo85@126/blog/static/10136328220133921313479/

使用fixedverifycode是为了解决验证码在Yii页面刷新的时候不变的问题,但是加入这个后 开启了ajax验证,就会老是出现验证码错误的情况。经过搜索,找到了一个简单解决yii页面刷新,验证码不变的方案:

经测试可以,原文地址:http://www.365joomla.com/php/yiishua-xin-ye-mian-yan-zheng-ma-bu-bian-chu-li-fang-fa

后又发现,如果form开启ajax验证,这时,如果输入错了一次验证码,再继续输入,不刷新验证码的话,就会一直出现验证码错误的情况。 一般情况是因为在设置CCaptchaAction参数时,设置了testLimit(相同验证码出现的次数。默认为3。小于等于0的值意味着不限制)为1,或则小于3,这种情况下,相同的验证码只能出现一次,而用户如果开启了ajax验证的话,填写的时候ajax验证一次已达到上限1次,提交的时候再验证一次,他会判断是否大于了testLimit的值,第二次验证testLimit会加1,显然大于了1,这时会重新生成验证码,从而出现验证码老是不正确

解决办法:

'testLimit'=>999, //这里可以设置大一些,以免验证超过三次会出错.

原文地址:http://blog.163.com/wangzhenbo85@126/blog/static/1013632822013230315743/

经过总结可以在form中开启 'enableAjaxValidation'=>true,

'enableClientValidation'=>true, 并正常使用yii 验证码,需要以下设置:

controller:

return array(

// captcha action renders the CAPTCHA image displayed on the contact page

'captcha'=>array(

'class'=>'CCaptchaAction',

'backColor'=>0xFFFFFF,

'maxLength'=>4, // 最多生成几个字符

'minLength'=>4, // 最少生成几个字符

'testLimit'=>999,

),);

model:

public $verifyCode; //声明verifycode存储验证码

public function rules()

{

return array(

// username and password are required

array('username, password', 'required'),

// rememberMe needs to be a boolean

array('rememberMe', 'boolean'),

// password needs to be authenticated

array('password', 'authenticate'),

// verifyCode needs to be entered correctly

array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()), //添加此验证规则,这是是验证验证码是否一致的,不需要额外的代码就通过这条规则验 证即可

);

views:

<?php $form=$this->beginWidget('bootstrap.widgets.BsActiveForm', array(

'id'=>'login-form',

'enableAjaxValidation'=>true,

'enableClientValidation'=>true,

'clientOptions'=>array(

'validateOnSubmit'=>true,

),

)); ?>

<?php if(CCaptcha::checkRequirements()): ?>

<div class="row">

<div class="col-md-4"><?php echo $form->textField($model,'verifyCode',array('placeholder'=>'输入验证码')); ?></div>

<div class="col-md-6"><?php $this->widget('CCaptcha',array('showRefreshButton'=>false,'clickableImage'=>true,'imageOptions'=>array('alt'=>'点击换图','title'=>'点击换图','style'=>'cursor:pointer;height:42px'))); ?></div>

<?php echo $form->error($model,'verifyCode'); ?>

</div>

<?php endif; ?>

<?php $this->endWidget(); ?>

<script language="javascript">

$(document).ready(function(){

var img = new Image;

img.onload=function(){

$('#yw0').trigger('click');

}

img.src = $('#yw0').attr('src'); //这段js解决yii验证码不刷新

});

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: