Yii框架验证码不显示、不刷新、验证不正确的一些解决办法
2014-12-26 20:43
501 查看
最近刚刚开始学习yii框架使用,真心的这个框架提供了很多简便的方法,但是自身bug和不足的地方太多了,首先验证码就存在很多的问题,用了好几天时间阅读源代码加上网上搜寻,终于是解决的验证码的问题,
1,验证码不显示:
首先保证你的controler 里面的captcha方法是可访问的,被分配的权限的,这个在rule里面设置。
第二,保证你的PHP GD插件已经被启用,
第三如果这样还是不显示,那么试试看这个方法吧,别人告诉我的。
解决方法:先找到yii\framework\web\widgets\captcha\CCaptchaAction.php,可以尝试通过以下几种方法来解决 :
1 尽量删除文中的空格
2 在php文件顶部加入error_reporting(0);
3 在header输出前加入ob_clean(); 也就是:
ob_clean();//加上这行
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
好了这样正常就能显示了;
2,验证码不刷新。
刷新页面不刷新:这个的解决方法就挺多了,可以在controler的action方法在配置captcha组件的时候'fixedVerifyCode'=“生成自定义的验证码”(可以用time函数);
还可以在CCaptchaAction 中在他的run方法中在else
$this->renderImage($this->getVerifyCode(true)); 这样每次使用都会得到新的验证码。
点击get a new code 不刷新,这个问题困扰我很久了,后面经过不断的阅读源代码,以及分析页面的get a new code 的连接终于解决的。
首先点击没有反应是因为没有加事件。所以手动加上一个jQuery事件,然后点击之后,利用ajax方法发出请求(url就是get a new code 的链接dataType要是HTML,不然会执行error方法),得到响应内容是:
header:text/html*****(省略) 然后{"hash1":356,"hash2":356,"url":"\/yiit\/index.php?r=newusers\/captcha&v=548a5dcb74cc1"}
好了对这段字符串进行解析,拿到URL里面的值赋给验证码图片的src就可以点击get a new code 刷新了!(这个花了我一个早晨时间,我靠)我是这样解析的:
var oriurl = strtext.split(':'); //strtext就是上面的字符串
var url = oriurl[oriurl.length-1].split('"');
var src = url[url.length-2];
src = src.replace(/\\/g, ""); //这里把里面的转义符去掉!不然不行
$('#yw0').attr('src',src);
万事ok?? no,no, still get a long way to go !因为这样的话刷新之后验证的时候会出问题!
3,验证不正确,不正常
这个在CCaptchaAction组件里面本身就有自带验证码方法,仔细一看,这段代码并没有出什么bug啊,那到底是为什么呢?
经过查看Yii的api终于让我找到了问题!因为还有一个类是在前台生产js代码,然后对验证码进行验证的。但是手动刷新之后,这个类并没有得到新的验证码,得到的还是原来的验证码,所以验证码的时候还是出了问题。解决方法,禁用前台js验证码或者干脆让那个类前台验证码返回true,这样使用CCaptchaAction自带的后台验证就没有问题了。
但是我忘了那个类叫什么了,因为现在找不到api放哪个文件夹了,,总之你们看一下api就会懂的!
从此验证码再没有问题,有问题看源码也能解决。
1,验证码不显示:
首先保证你的controler 里面的captcha方法是可访问的,被分配的权限的,这个在rule里面设置。
第二,保证你的PHP GD插件已经被启用,
第三如果这样还是不显示,那么试试看这个方法吧,别人告诉我的。
解决方法:先找到yii\framework\web\widgets\captcha\CCaptchaAction.php,可以尝试通过以下几种方法来解决 :
1 尽量删除文中的空格
2 在php文件顶部加入error_reporting(0);
3 在header输出前加入ob_clean(); 也就是:
ob_clean();//加上这行
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
好了这样正常就能显示了;
2,验证码不刷新。
刷新页面不刷新:这个的解决方法就挺多了,可以在controler的action方法在配置captcha组件的时候'fixedVerifyCode'=“生成自定义的验证码”(可以用time函数);
还可以在CCaptchaAction 中在他的run方法中在else
$this->renderImage($this->getVerifyCode(true)); 这样每次使用都会得到新的验证码。
点击get a new code 不刷新,这个问题困扰我很久了,后面经过不断的阅读源代码,以及分析页面的get a new code 的连接终于解决的。
首先点击没有反应是因为没有加事件。所以手动加上一个jQuery事件,然后点击之后,利用ajax方法发出请求(url就是get a new code 的链接dataType要是HTML,不然会执行error方法),得到响应内容是:
header:text/html*****(省略) 然后{"hash1":356,"hash2":356,"url":"\/yiit\/index.php?r=newusers\/captcha&v=548a5dcb74cc1"}
好了对这段字符串进行解析,拿到URL里面的值赋给验证码图片的src就可以点击get a new code 刷新了!(这个花了我一个早晨时间,我靠)我是这样解析的:
var oriurl = strtext.split(':'); //strtext就是上面的字符串
var url = oriurl[oriurl.length-1].split('"');
var src = url[url.length-2];
src = src.replace(/\\/g, ""); //这里把里面的转义符去掉!不然不行
$('#yw0').attr('src',src);
万事ok?? no,no, still get a long way to go !因为这样的话刷新之后验证的时候会出问题!
3,验证不正确,不正常
这个在CCaptchaAction组件里面本身就有自带验证码方法,仔细一看,这段代码并没有出什么bug啊,那到底是为什么呢?
经过查看Yii的api终于让我找到了问题!因为还有一个类是在前台生产js代码,然后对验证码进行验证的。但是手动刷新之后,这个类并没有得到新的验证码,得到的还是原来的验证码,所以验证码的时候还是出了问题。解决方法,禁用前台js验证码或者干脆让那个类前台验证码返回true,这样使用CCaptchaAction自带的后台验证就没有问题了。
但是我忘了那个类叫什么了,因为现在找不到api放哪个文件夹了,,总之你们看一下api就会懂的!
从此验证码再没有问题,有问题看源码也能解决。
相关文章推荐
- yii1.6 验证码不显示,死活验证不对的解决办法
- Yii输入正确验证码却验证失败的解决方法
- IE6 验证码刷新失败显示空白解决办法
- yii 使用cactiveform 创建表单时候遇到的一些验证问题和使用ajax_form时重置验证规则的解决办法
- 页面及验证视图状态MAC失败问题正确的解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法
- 无法显示 XML 页。 使用 XSL 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试的解决办法
- 某一框架页面使整个框架页面刷新问题的解决办法!
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- js windows.open 不能显示页面,刷新后方可显示的解决办法
- ASP.NET Post页面及验证视图状态MAC失败问题正确的解决办法
- Fedora 显示屏幕偏移,刷新的频率太低,显示器闪的厉害的解决办法
- 不能显示验证码的解决办法
- 无法载入 mysql 扩展,不支持Mysql数据库,php无法显示验证码 解决办法
- html文件修改后缀为aspx之后在ie6中格式显示不正确问题的解决办法
- IE无法显示验证码的解决办法
- 解决JFreeChart和一些JAVA程序在linux上不能正确显示中文
- ActiveX在MDI子窗体上不能正确显示的一个解决办法
- 登陆验证码图片不显示解决办法
- 验证视图状态MAC失败问题正确的解决办法