yii 验证码 CCaptcha的总结
来源:互联网 发布:cs1.5弹道优化脚本 编辑:程序博客网 时间:2024/06/05 00:46
今天用到yii的验证码 ccaptcha,经过在网上搜寻 找到以下例子:
1、在controller中加入代码
(1)启用
<?phppublic function actions() { return array( // 启用验证码组件 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, 'maxLength'=>4, // 最多生成几个字符 'minLength'=>4, // 最少生成几个字符 'fixedVerifyCode' => substr(md5(time()),11,4), //每次都刷新验证码 ), ); }?>
(2)添加进入规则
<?phparray('allow', 'actions'=>array('captcha'), 'users'=>array('*'), ),?>
2、在model中加入代码
(1)声明
<?php
public
$verifyCode
;
?>
(2)加入属性
<?php
public
function
attributeLabels()
{
return
array
(
'verifyCode'
=>
'Verification Code'
,
);
}
?>
(3)加入过滤规则
<?php
array
(
'verifyCode'
,
'captcha'
,
'allowEmpty'
=>!
extension_loaded
(
'gd'
)),
?>
3、在view中写代码
<?php
if
(CCaptcha::checkRequirements()): ?>
<div
class
=
"row"
>
<?php
echo
$form
->labelEx(
$model
,
'verifyCode'
); ?>
<div>
<?php
$this
->widget(
'CCaptcha'
,
array
(
'showRefreshButton'
=>false,
'clickableImage'
=>true,
'imageOptions'
=>
array
(
'alt'
=>
'点击换图'
,
'title'
=>
'点击换图'
,
'style'
=>
'cursor:pointer'
))); ?>
<?php
echo
$form
->textField(
$model
,
'verifyCode'
); ?>
</div>
<div
class
=
"hint"
>Please enter the letters
as
they are shown in the image above.
<br/>Letters are not
case
-sensitive.</div>
<?php
echo
$form
->error(
$model
,
'verifyCode'
); ?>
</div>
<?php
endif
; ?>
如果在 form中开启了,这两个
'enableAjaxValidation'=>true,
'enableClientValidation'=>true,
然后使用
'fixedVerifyCode'
=>
substr
(md5(time()),11,4),
会导致这个问题发生,在这篇文章中,有详细描述为什么会出现这个问题的原因:http://blog.163.com/wangzhenbo85@126/blog/static/10136328220133921313479/
使用fixedverifycode是为了解决验证码在Yii页面刷新的时候不变的问题,但是加入这个后 开启了ajax验证,就会老是出现验证码错误的情况。经过搜索,找到了一个简单解决yii页面刷新,验证码不变的方案:
$(document).ready(
function
(){
var
img =
new
Image;
img.onload=
function
(){
$(
'#yw0'
).trigger(
'click'
);
}
img.src = $(
'#yw0'
).attr(
'src'
);
});
经测试可以,原文地址: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>
- yii 验证码 CCaptcha的总结
- yii 验证码 CCaptcha的总结
- 自由使用yii的验证码总结
- Yii 验证码的使用
- Yii验证规则总结。
- 关于yii的验证码的生成
- Yii Framework中验证码的使用
- Yii 验证码(captcha)的使用
- YII- FRAMEWORK- 中验证码的使用
- Yii框架captcha验证码的使用
- Yii的csrf验证
- yii的csrf验证
- Yii的CSRF验证
- Yii的CSRF验证
- yii 创建 验证码
- Yii验证码实现
- Yii验证码操作
- yii生成验证码
- 以为女程序员的奋斗路程
- Sencha touch 开发系列:类与ST组件,事件,自定义组件
- 等待通知中 。。。
- WIKIOI-1014 装箱问题
- OC自学笔记—2
- yii 验证码 CCaptcha的总结
- TCP/IP笔试面试
- 提高数据库并发性能概要
- 黑马程序员----异常
- Trident State:事务相关设计
- Codeforces Beta Round #87 (Div. 2) / 116B Little Pigs and Wolves (简单匹配)
- 《小米是如何炼成的》-雷军百度讲互联网思维做手机
- CodeCombat-是个陷阱
- acm博弈知识学习