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 相关文章推荐
main.php
Dec 09 PHP
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
php代码架构的八点注意事项
Jan 25 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
PHP中多字节字符串操作实例详解
Aug 23 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 Session变量不能传送到下一页的解决方法
2009/11/27 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
JQuery性能优化的几点建议
2014/05/14 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
web.py中调用文件夹内模板的方法
2014/08/26 Python
Python实现获取网站PR及百度权重
2015/01/21 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
对python中UDP,socket的使用详解
2019/08/22 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python3让print输出不换行的方法
2020/08/24 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
高校辅导员推荐信范文
2013/12/25 职场文书
投资协议书范本
2014/04/21 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
干部作风建设工作总结
2014/10/29 职场文书
写给老师的感谢信
2015/01/20 职场文书
Python操作CSV格式文件的方法大全
2021/07/15 Python