Heim >Backend-Entwicklung >PHP-Tutorial >解决Yii 输入正确验证码验证失败

解决Yii 输入正确验证码验证失败

WBOY
WBOYOriginal
2016-07-29 08:58:141138Durchsuche

在做一个需求时,发现输入正确验证码,但是都提示验证码错误
解决Yii 输入正确验证码验证失败

最后追踪代码发现,如果 Model 在 save 前,单独做了 validate 验证,则在验证结束后,会重新生成验证码

然后在我们 Model save 时,也会进行 validate 验证,验证时,验证码已经重新生成了,所以会匹配不上

<code>// 如果这里用到了验证码,就会出问题

$model = new Test();

$model->validate();

$model->save();

</code>
<code>
// 这样是正确的

$model = new  Test();
// 把需要验证的 attribute 放进去,排除验证码字段
$model->validate(array('test1','test2'));

$model->save()</code>

我们可以看framework/web/widgets/captcha/CCaptchaAction.php 可以很容易就发现问题了

<code>
<?php class CaptchaAction extends CCaptchaAction
{
    public function validate($input, $caseSensitive)
    {
        $code = $this->getVerifyCode();
        $valid = $caseSensitive ? ($input === $code) : !strcasecmp($input, $code);
        $session = Yii::app()->session;
        $session->open();
        $name = $this->getSessionKey() . 'count';
        if (!Yii::app()->request->isAjaxRequest) {
            $session[$name] = $session[$name] + 1;
        }
        
        // 这里会重新生成
        if ($session[$name] > $this->testLimit && $this->testLimit > 0) {
            $this->getVerifyCode(true);
        }
        return $valid;
    }
}

</code>

以上就介绍了解决Yii 输入正确验证码验证失败,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP SessionsNächster Artikel:Yii源码解读-属性