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
PHP 文件类型判断代码
Mar 13 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
php生成gif动画的方法
Nov 05 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
php的RSA加密解密算法原理与用法分析
Jan 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读取MySQL数据代码
2008/06/05 PHP
php图片上传类 附调用方法
2016/05/15 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
2018/06/09 jQuery
Vue实现todolist删除功能
2018/06/26 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
使用python实现扫描端口示例
2014/03/29 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
利用CSS3实现自定义滚动条代码分享
2016/08/18 HTML / CSS
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
运动会广播稿400字
2014/01/25 职场文书
质检部经理岗位职责
2014/02/19 职场文书
道德之星事迹材料
2014/05/03 职场文书
学校党员对照检查材料
2014/08/28 职场文书
升学宴演讲稿
2014/09/01 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
深入理解go缓存库freecache的使用
2022/02/15 Golang