2

我的验证码没有改变,总是出现相同的单词,除非点击Reload Captcha按钮。为什么testLimit不能正常工作?

控制器.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));
}

查看.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; ?>
4

2 回答 2

3

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

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

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

于 2014-01-13T23:52:39.613 回答
0

很简单的解决方案,使用 JScript。此脚本将重新加载图像验证码。

$(document).ready(function () {
setTimeout(function () {
    $("img#reviews-verifycode-image").click();
}, 100);
});
于 2017-01-06T15:17:37.693 回答