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 相关文章推荐
模仿OSO的论坛(四)
Oct 09 PHP
中国站长站 For Dede4.0 采集规则
May 27 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
php获取文件大小的方法
Feb 26 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
简单介绍PHP非阻塞模式
Mar 03 PHP
PHP7常量数组用法分析
Sep 26 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
php用户名的密码加密更安全的方法
Jun 21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 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如何利用P3P实现跨域
2013/08/24 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
PHP连接access数据库
2015/03/27 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
JS实现轮播图效果
2020/01/11 Javascript
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
python得到windows自启动列表的方法
2018/10/14 Python
python代码编写计算器小程序
2020/03/30 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python内存管理机制原理详解
2019/08/12 Python
python实现密码强度校验
2020/03/18 Python
Python操作Jira库常用方法解析
2020/04/10 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
应聘教师推荐信
2013/10/31 职场文书
小学教师事迹材料
2014/01/13 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
考试不及格的检讨书
2014/01/22 职场文书
公民授权委托书
2014/10/15 职场文书
交心谈心活动总结
2015/05/11 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
幼儿园家长心得体会
2016/01/21 职场文书