Yii框架验证码不显示、不刷新、验证不正确的一些解决办法

来源:互联网 发布:ubuntu设置无线网络 编辑:程序博客网 时间:2024/05/21 17:42

最近刚刚开始学习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就会懂的!

从此验证码再没有问题,有问题看源码也能解决。





0 0
原创粉丝点击