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入门源程序
Oct 09 PHP
PHP 彩色文字实现代码
Jun 29 PHP
php之Memcache学习笔记
Jun 17 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
php微信开发之关注事件
Jun 14 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
2010/10/20 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
python实现文件路径和url相互转换的方法
2015/07/06 Python
Python定时器实例代码
2017/11/01 Python
python获取代理IP的实例分享
2018/05/07 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python实现学生成绩测评系统
2020/06/22 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
Python 随机按键模拟2小时
2020/12/30 Python
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
考试退步检讨书
2014/01/15 职场文书
中秋节主持词
2014/04/02 职场文书
家长会欢迎标语
2014/06/24 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
企业法人代表证明书
2014/09/27 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
技术股东合作协议书
2014/12/02 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
对象析构函数__del__在Python中何时使用
2022/03/22 Python
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python