这篇文章主要给大家介绍了yii输入正确验证码却验证失败的解决方法,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
前言
最近在做一个需求时,发现输入正确验证码,但是都提示验证码错误
最后追踪代码发现,如果 model 在 save 前,单独做了 validate 验证,则在验证结束后,会重新生成验证码
然后在我们 model save 时,也会进行 validate 验证,验证时,验证码已经重新生成了,所以会匹配不上
// 如果这里用到了验证码,就会出问题
$model = new test();
$model->validate();
$model->save();
// 这样是正确的
$model = new test();
// 把需要验证的 attribute 放进去,排除验证码字段
$model->validate(array('test1','test2'));
$model->save()
我们可以看framework/web/widgets/captcha/ccaptchaaction.php 可以很容易就发现问题了
<?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;
}
}
以上就是解决yii输入正确验证码却验证失败的方法的详细内容。
