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完整的日历类(CLASS)
Nov 27 PHP
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
php+mysql实现数据库随机重排实例
Oct 17 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
php处理带有中文URL的方法
Jul 11 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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修正代码
2011/05/09 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
Prototype Date对象 学习
2009/07/12 Javascript
javascript中length属性的探索
2011/07/31 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
vue组件间通信解析
2017/03/01 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
简单介绍Python中的struct模块
2015/04/28 Python
Python中的choice()方法使用详解
2015/05/15 Python
python高阶爬虫实战分析
2018/07/29 Python
浅述python2与python3的简单区别
2018/09/19 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
python实现ftp文件传输功能
2020/03/20 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
仓库规划计划书
2014/04/28 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
班级活动总结格式
2014/08/30 职场文书
党员作风建设自查报告
2014/10/23 职场文书
北京颐和园导游词
2015/01/30 职场文书
国庆节慰问信
2015/02/15 职场文书
新闻稿件写作范文
2015/07/18 职场文书
2015中学教学工作总结
2015/07/22 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python