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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
深入理解PHP之源码目录结构与功能说明
Jun 01 PHP
Laravel中的Auth模块详解
Aug 17 PHP
PHP date()格式MySQL中插入datetime方法
Jan 29 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
php 动态添加记录
2009/03/10 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
[01:35]2018完美盛典章节片——共竞
2018/12/17 DOTA
python生成IP段的方法
2015/07/07 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python callable()函数用法实例分析
2018/03/17 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
Django实现内容缓存实例方法
2020/06/30 Python
python中取绝对值简单方法总结
2020/07/24 Python
浅谈Python __init__.py的作用
2020/10/28 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
C/C++程序员常见面试题一
2012/12/08 面试题
教师自荐信
2013/12/10 职场文书
生物科学专业自荐书
2014/06/20 职场文书
小学社团活动总结
2014/06/27 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
计划生育证明书写要求
2014/09/17 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
2016年母亲节寄语
2015/12/04 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python