欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Yii輸入正確驗(yàn)證碼卻驗(yàn)證失敗的解決方法

 更新時(shí)間:2017年06月06日 11:41:30   作者:Enda  
這篇文章主要給大家介紹了Yii輸入正確驗(yàn)證碼卻驗(yàn)證失敗的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

前言

最近在做一個(gè)需求時(shí),發(fā)現(xiàn)輸入正確驗(yàn)證碼,但是都提示驗(yàn)證碼錯(cuò)誤

最后追蹤代碼發(fā)現(xiàn),如果 Model 在 save 前,單獨(dú)做了 validate 驗(yàn)證,則在驗(yàn)證結(jié)束后,會(huì)重新生成驗(yàn)證碼

然后在我們 Model save 時(shí),也會(huì)進(jìn)行 validate 驗(yàn)證,驗(yàn)證時(shí),驗(yàn)證碼已經(jīng)重新生成了,所以會(huì)匹配不上

// 如果這里用到了驗(yàn)證碼,就會(huì)出問題

$model = new Test();

$model->validate();

$model->save();
// 這樣是正確的

$model = new Test();
// 把需要驗(yàn)證的 attribute 放進(jìn)去,排除驗(yàn)證碼字段
$model->validate(array('test1','test2'));

$model->save()

我們可以看framework/web/widgets/captcha/CCaptchaAction.php 可以很容易就發(fā)現(xiàn)問題了

<?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;
 }

 // 這里會(huì)重新生成
 if ($session[$name] > $this->testLimit && $this->testLimit > 0) {
  $this->getVerifyCode(true);
 }
 return $valid;
 }
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論