Yii输入正确验证码却验证失败的解决方法


Posted in PHP onJune 06, 2017

前言

最近在做一个需求时,发现输入正确验证码,但是都提示验证码错误

最后追踪代码发现,如果 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;
 }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP输出控制功能在简繁体转换中的应用
Oct 09 PHP
图象函数中的中文显示
Oct 09 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
PHP提示Notice: Undefined variable的解决办法
Nov 24 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
php线性表的入栈与出栈实例分析
Jun 12 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
Smarty简单生成表单元素的方法示例
May 23 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 #PHP
解决php-fpm.service not found问题的办法
Jun 06 #PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 #PHP
php 7新特性之类型申明详解
Jun 06 #PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 #PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 #PHP
PHP实现的激活用户注册验证邮箱功能示例
Jun 06 #PHP
You might like
android上传图片到PHP的过程详解
2015/08/03 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
python赋值操作方法分享
2013/03/23 Python
python解析文件示例
2014/01/23 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
python中操作文件的模块的方法总结
2021/02/04 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
阿玛尼美妆加拿大官方商城:Giorgio Armani Beauty加拿大
2017/10/24 全球购物
2014年驻村干部工作总结
2014/11/17 职场文书
学校社团活动总结
2015/05/07 职场文书
在校证明模板
2015/06/17 职场文书
SQL CASE 表达式的具体使用
2022/03/21 SQL Server