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操作数组的一些函数整理介绍
Jul 17 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
php密码生成类实例
Sep 24 PHP
四种php中webservice实现的简单架构方法及实例
Feb 03 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
php文件上传类完整实例
May 14 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
简单谈谈PHP中的Reload操作
Dec 12 PHP
PHP 验证身份证是否合法的函数
Feb 09 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 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设计模式 Composite (组合模式)
2011/06/26 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
javascript数组的扩展实现代码集合
2008/06/01 Javascript
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
Python Socket编程入门教程
2014/07/11 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python卸载模块的方法汇总
2016/06/07 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python三方库之requests的快速上手
2019/03/04 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
sklearn的predict_proba使用说明
2020/06/28 Python
Python 绘制可视化折线图
2020/07/22 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
什么是测试驱动开发(TDD)
2012/02/15 面试题
房地产开发计划书
2014/01/10 职场文书
高中生家长会演讲稿
2014/01/14 职场文书
社区戒毒工作方案
2014/06/04 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS