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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
如何在WIN2K下安装PHP4.04
Oct 09 PHP
MySQL GBK→UTF-8编码转换
May 24 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
PHP实现动态压缩js与css文件的方法
May 02 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
PHP实现简单登录界面
Oct 23 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 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数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
PHP最常用的正则表达式
2017/02/13 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
React简单介绍
2017/05/24 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
教你使用vue-cli快速构建的小说阅读器
2019/05/13 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
python获取指定网页上所有超链接的方法
2015/04/04 Python
详细介绍Python中的偏函数
2015/04/27 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
python函数的万能参数传参详解
2019/07/26 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
python 异步async库的使用说明
2020/05/04 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
课程设计心得体会
2013/12/28 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
质监局领导班子对照检查材料思想汇报
2014/09/27 职场文书
初中教师个人总结
2015/02/10 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
Python开发五子棋小游戏
2022/05/02 Python