首頁 > 後端開發 > php教程 > 解決Yii輸入正確驗證碼卻驗證失敗的方法

解決Yii輸入正確驗證碼卻驗證失敗的方法

怪我咯
發布: 2023-03-10 14:14:02
原創
1442 人瀏覽過

這篇文章主要給大家介紹了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() . &#39;count&#39;;
 if (!Yii::app()->request->isAjaxRequest) {
  $session[$name] = $session[$name] + 1;
 }

 // 这里会重新生成
 if ($session[$name] > $this->testLimit && $this->testLimit > 0) {
  $this->getVerifyCode(true);
 }
 return $valid;
 }
}
登入後複製

以上是解決Yii輸入正確驗證碼卻驗證失敗的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板