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 include的妙用,实现路径加密
Jul 29 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
PHP mkdir()无写权限的问题解决方法
Jun 19 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php实现简单加入购物车功能
Mar 07 PHP
PHP中递归的实现实例详解
Nov 14 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
基于Zend的Captcha机制的应用
2013/05/02 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
javascript实现日历效果
2019/06/17 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
python调用java的Webservice示例
2014/03/10 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
python中subprocess批量执行linux命令
2018/04/27 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python帮你识破双11的套路
2019/11/11 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
APM Monaco中国官网:来自摩纳哥珠宝品牌
2017/12/27 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
积极分子思想汇报
2014/01/04 职场文书
小学后勤管理制度
2014/01/14 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
2014年个人售房协议书
2014/10/30 职场文书
夫妻吵架保证书
2015/05/08 职场文书
用Python将GIF动图分解成多张静态图片
2021/06/11 Python