Yii Captcha不改变

时间:2013-01-28 17:16:05

标签: php yii

除非点击Reload Captcha按钮,否则我的Captcha不会更改,始终显示相同的字词。为什么testLimit无法正常工作?

Controller.php这样

public $attempts = 5; // allowed 5 attempts
public $counter;

public function actions()
{
    return array(
        'captcha'=>array(
        'class'=>'CCaptchaAction',
        'backColor'=>0xf5f5f5,
        'testLimit'=>1,
    );
}

private function captchaRequired()
{           
    return Yii::app()->session->itemAt('captchaRequired') >= $this->attempts;
}

public function actionLogin()
{
    if (!Yii::app()->user->isGuest) $this->redirect(array('users/update'));

    $model = $this->captchaRequired()? new LoginForm('captchaRequired') : new LoginForm;

    // collect user input data
    if(isset($_POST['LoginForm']))
    {
        $model->attributes=$_POST['LoginForm'];
        // validate user input and redirect to the previous page if valid
        if($model->validate() && $model->login()) {
            $this->redirect(array('users/update'));
        } else {
            $this->counter = Yii::app()->session->itemAt('captchaRequired') + 1;
            Yii::app()->session->add('captchaRequired',$this->counter);
        }
    }
    // display the login form
    $this->render('login',array('model'=>$model));
}

View.php

<?php if($model->scenario == 'captchaRequired'): ?>
    <br>
    <legend><?php echo CHtml::activeLabelEx($model,'verifyCode'); ?></legend>
    <div class="control-group">
        <div class="controls">
            <?php $this->widget('CCaptcha'); ?>
            <?php echo CHtml::activeTextField($model,'verifyCode'); ?>
        </div>
    </div>
<?php endif; ?>

2 个答案:

答案 0 :(得分:2)

testLimit是验证码提交的数量,用户可以在生成的散列更改之前尝试。用于避免拼写错误。

验证会话中的代码存储(http://www.yiiframework.com/doc/api/1.1/CCaptchaAction#getVerifyCode-detail),因此默认代码只能通过以下两种方式之一进行更改:使用错误代码提交testLimit次表单,或者由用户手动更新。

所以你可以扩展CCaptchaAction类来实现你想要的东西,例如。强制将$regenerate变量设置为true。

答案 1 :(得分:0)

是简单的解决方案,请使用JScript。这个脚本将重新加载图片captha。

$(document).ready(function () {
setTimeout(function () {
    $("img#reviews-verifycode-image").click();
}, 100);
});