yii 验证码那点事儿

今天要使用yii验证码, 不过, 这个验证码是整站通用的, 也就是说, 有个表单的提交是使用ajax方式来提交, 整站, 不管在哪个地方, 都能点出来此窗口, 来提交信息

关于yii验证码, framework/web/widgets/captcha/CCaptcha.php里, 它源码里有这么一部分

>---protected function renderImage()
>---{
>--->---if(!isset($this->imageOptions[‘id‘]))
>--->--->---$this->imageOptions[‘id‘]=$this->getId();

>--->---$url=$this->getController()->createUrl($this->captchaAction,array(‘v‘=>uniqid()));
>--->---$alt=isset($this->imageOptions[‘alt‘])?$this->imageOptions[‘alt‘]:‘‘;
>--->---echo CHtml::image($url,$alt,$this->imageOptions);
>---}

可以看得到, 它每个验证码的生成, 验证都是附着于当前控制器的, 所以, 对于整站通用的, 默认是行不通的.

换个思路, 既然知道ajax访问的路径, 那就修改默认的方法, 让其载入时, 都访问同一控制器, 可以把 framework/web/widgets/captcha/CCaptcha.php 这个文件复制一份, 放至项目下的 protected/widgets 目录下, 名字自己定, 我在这里定CommonCaptcha.php, 在配置文件 main.php 里设置自动导入(import)

<?php
return array(
    ‘import‘ => array(
            ‘application.widgets.*‘,
    ),
);

?>

然后, 可以在复制过来的文件里搜索    ‘getController‘ , 不出意外的话, 是可以搜索到两个的.

第一个 $url=$this->getController()->createUrl($this->captchaAction,array(‘v‘=>uniqid()));

可修改为 $url=Yii::app()->createUrl(‘/onlineService/captcha‘,array(‘v‘=>uniqid()));

第二个 $url=$this->getController()->createUrl($this->captchaAction,array(CCaptchaAction::REFRESH_GET_VAR=>true));

可修改为 $url=Yii::app()->createUrl(‘/onlineService/captcha‘,array(CCaptchaAction::REFRESH_GET_VAR=>true));

也就是不使用获取的控制器, 而是指定控制器, 指定验证码的路径.

然后在控制器里, 就可以使用

$this->createAction(‘captcha‘)->getVerifyCode();

这句代码, 在onlineService控制器里获取验证码, 然后对比post过来的验证码, 就可以了, 这样, 也无需在model里再多加一个验证的参数了.

至此, 验证Ok

时间: 2024-10-11 02:56:27

yii 验证码那点事儿的相关文章

Yii 验证码验证

控制器如下 LoginForm如下 视图如下 <div class="loginbody">            <span class="systemlogo"></span>             <div class="loginbox">                <ul>                    <?php $form = $this->beg

yii 验证码 CCaptcha的总结(转)

今天用到yii的验证码 ccaptcha,经过在网上搜寻 找到以下例子: 1.在controller中加入代码 (1)启用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?php public function actions()     {         return array(             // 启用验证码组件             'captcha'=>array(                 'class'=>'CCaptchaA

yii 验证码的使用

在HappyController 中加入 public function actions(){ return array( // captcha action renders the CAPTCHA image displayed on the contact page 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, //背景颜色 'minLength'=>4, //最短为4位 'maxLeng

关于 yii 验证码显示, 但点击不能刷新的处理

先说说 render 与 renderPartial, 各位看官, 先别走, 我没跑题, 这个问题如果需要解决, 关键就在 render 与 renderPartial 的区别. renderPartial() 方法 public string renderPartial(string $view, array $data=NULL, boolean $return=false, boolean $processOutput=false) $view string name of the vie

yii 验证码的使用和验证过程

如果要实现这个过程的话,需要几个步骤 第一步就是controller的操作 在要操作的控制器中添加如下代码: public function actions(){ return array( // captcha action renders the CAPTCHA image displayed on the contact page 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, 'maxLeng

yii验证码Captcha使用以及为什么验证码不刷新问题

Web开发的过程中, 经常会用到验证码, 以防止机器人不断的提交数据, 造成网站的瘫痪. Yii里提供了一个验证码的插件, 就是Captcha. 第一步: 在项目中使用Captcha需要以下一些设置:在Controller里添加方法 actions public function actions () { return array ( 'captcha' => array ( 'class' => 'CCaptchaAction' , 'minLength' => 1 , 'maxLen

yii 验证码功能的实现

首先知晓我们在使用验证码的时候通常是和我们的表单小部件配合使用首先我们创建model层 新建一个php文件 名字叫做Verifycode.php 要在我们的model层 创建我们的验证码的验证规则,我这里简单的写两个规则 一个是 非空 另一个是验证码必须验证正确 规则写在我们的model的rules里 <?php/*** Created by PhpStorm.* User: jinlei* Date: 2017/2/13* Time: 13:57*/ namespace frontend\mo

Android Demo手机获取验证码

注册很多app或者网络账户的时候,经常需要手机获取验证码,来完成注册,那时年少,只是觉得手机获取验证码这件事儿很好玩,并没有关心太多,她是如何实现的,以及她背后的故事到底是什么样子的,现在小编接手的这个项目里面,就需要通过手机号进行注册,并且手机号发送相应的验证码,来完成注册,那么在一些应用app里面到底是如何实现点击按钮获取验证码,来完成注册这整个流程的呢?今天小编就以注册为例,和小伙伴们分享一下,如何通过手机号获取验证码来完成注册的一整套流程以及如何采用正则表达式来验证手机号码是否符合电信.

OWASP top10

PhishTank 是互联网上免费提供恶意网址黑名单的组织之一,它的黑名单由世界各地的志愿者提供,且更新频繁. 1.XSS 1.1. XSS简介 跨站脚本攻击,英文全称是Cross Site Script,本来缩写是CSS,但是为了和层叠样式表有所区分,所以在安全领域叫做"XSS". XSS攻击,通常指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击. 1.2. XSS分类 XSS根据效果的不同可以分成如下几类 第