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+oracle 分页类
Oct 09 PHP
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
使用URL传输SESSION信息
Jul 14 PHP
PHP结合jQuery实现找回密码
Jul 22 PHP
yii数据库的查询方法
Dec 28 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
php多进程应用场景实例详解
Jul 22 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
Apr 26 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
php判断linux下程序问题实例
2015/07/09 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
函数四种调用模式以及其中的this指向
2017/01/16 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
Django实现学生管理系统
2019/02/26 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
中国梦主题教育活动总结
2014/05/05 职场文书
红头文件任命书范本
2014/06/05 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
商务代表岗位职责
2015/02/15 职场文书
借钱欠条怎么写
2015/07/03 职场文书
初中毕业感言300字
2015/07/31 职场文书