Yii輸入正確驗(yàn)證碼卻驗(yàn)證失敗的解決方法
前言
最近在做一個(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ì)腳本之家的支持。
- Yii2框架實(shí)現(xiàn)登陸添加驗(yàn)證碼功能示例
- Yii2 如何在modules中添加驗(yàn)證碼的方法
- Yii2下點(diǎn)擊驗(yàn)證碼的切換實(shí)例代碼
- Yii2簡(jiǎn)單實(shí)現(xiàn)給表單添加驗(yàn)證碼的方法
- Yii2增加驗(yàn)證碼步驟詳解
- yii2中添加驗(yàn)證碼的實(shí)現(xiàn)方法
- Yii1.0 不同頁(yè)面多個(gè)驗(yàn)證碼的使用實(shí)現(xiàn)
- Yii 2.0自帶的驗(yàn)證碼使用經(jīng)驗(yàn)分享
- Yii框架實(shí)現(xiàn)的驗(yàn)證碼、登錄及退出功能示例
- Yii使用Captcha驗(yàn)證碼的方法
- yii實(shí)現(xiàn)創(chuàng)建驗(yàn)證碼實(shí)例解析
- YII2框架中驗(yàn)證碼的簡(jiǎn)單使用方法示例
相關(guān)文章
PHP 獲取視頻時(shí)長(zhǎng)的實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了php獲取視頻時(shí)長(zhǎng)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07Thinkphp的volist標(biāo)簽嵌套循環(huán)使用教程
這篇文章主要介紹了Thinkphp實(shí)現(xiàn)volist標(biāo)簽嵌套循環(huán)的方法,需要的朋友可以參考下2014-07-07php將session放入memcached的設(shè)置方法
這篇文章主要介紹了php將session放入memcached的設(shè)置方法,需要的朋友可以參考下2014-02-02php設(shè)計(jì)模式之抽象工廠模式分析【星際爭(zhēng)霸游戲案例】
這篇文章主要介紹了php設(shè)計(jì)模式之抽象工廠模式,結(jié)合星際爭(zhēng)霸游戲案例形式分析了PHP抽象工廠模式的具體原理、使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-01-01使用Rancher在K8S上部署高性能PHP應(yīng)用程序的教程
這篇文章主要介紹了使用Rancher在K8S上部署高性能PHP應(yīng)用程序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07php在windows環(huán)境下獲得cpu內(nèi)存實(shí)時(shí)使用率(推薦)
這篇文章主要介紹了php在windows環(huán)境下獲得 cpu 內(nèi)存實(shí)時(shí)使用率的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02