问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2024-09-17 03:34

我来回答

1个回答

热心网友 时间:2024-10-04 10:48

Web 开发的过程中 ,  经常会用到验证码 ,  以防止机器人不断的提交数据 ,  造成网站的瘫痪 . Yii 里提供了一个验证码的插件 ,  就是 Captcha。参考资料http://houdunwang.com/lesson.html

第一步:

  在项目中使用 Captcha 需要以下一些设置 : 在 Controller 里添加方法  actions

  public function actions ()
 {
   return array (
     'captcha' => array (
       'class' => 'CCaptchaAction' ,
       'minLength' => 1 ,
       'maxLength' => 5 ,
       'backColor' => 0xFFFFFF ,
       'width' => 100 ,
       'height' => 40
     )
    );
 }

  同时 ,  需要将 captacha 添加到 accessRules 里 ,  以允许所有用户访问该方法 . 如下

  添加一个属性:

  public $verifyCode;
          array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
array('captcha', 'captcha', 'allowEmpty'=>!extension_loaded('gd'), 'on'=>'login'),//在rules数组最后添加:

第二在你的视图里面加上以下代码  

  <?php $this->widget('CCaptcha'); ?>
// 下面这个可以点击图片进行换验证码
 <div><?php $this->widget('CCaptcha',array('showRefreshButton'=>false,'clickableImage'=>true,'imageOptions'=>array('alt'=>'点击换图','title'=>'点击换图','style'=>'cursor:pointer'))); ?></div>

第三 我们需要在我们的 form model 中添加一个 verifycode 的属性来存放用户输入的验证码,然后通过 captcha 验证器来验证用户输入的验证码的准确性。

  public $verifyCode;
并在rules中添加如下
public function rules()
{
 return array(
...
array('verifyCode', 'captcha', 'on'=>'login', 'allowEmpty'=> !extension_loaded('gd')),
...
    );
}

  验证码为什么没有刷新的原因:

  后台登陆调用验证码,点击验证码不刷新,没有反应(所有验证码配置,参数都是正确的)。找错的时候发现可以刷新验证码的页面比不可以刷新验证码的页面多了一段 js 代码,用来处理点击验证码刷新的事件。

  为什么会少了一段代码?原来就是因为控制器分别调用了 renderPartial 和 render. 下面就说说它们的区别:

  在进行页面输出渲染的时候。

  render  输出父模板的内容,将渲染的内容,嵌入父模板。

  renderPartial  则不输出父模板的内容。只对本次渲染的局部内容,进行输出。

  同时还有个重要的区别:

  render  函数内部默认执行 processOutput($output) 函数, 会将把组件,比如 CTreeView  里面注册到 CClientScript  里面的需要的脚本进行渲染输出。

  而 renderPartial()  默认不自动渲染输出客户端脚本,需要进行参数的指定,才会输出:

  renderPartial($view,$data=null,$return=false,$processOutput=false)

  指定 processOutput  为  true  即可。

  就像我们遇到的问题,用 renderPartial 时,页面没有输出验证码刷新的那段 js,所以显示不正常。

更多问题到问题求助专区http://bbs.houdunwang.com/

热心网友 时间:2024-10-04 10:49

Web 开发的过程中 ,  经常会用到验证码 ,  以防止机器人不断的提交数据 ,  造成网站的瘫痪 . Yii 里提供了一个验证码的插件 ,  就是 Captcha。参考资料http://houdunwang.com/lesson.html

第一步:

  在项目中使用 Captcha 需要以下一些设置 : 在 Controller 里添加方法  actions

  public function actions ()
 {
   return array (
     'captcha' => array (
       'class' => 'CCaptchaAction' ,
       'minLength' => 1 ,
       'maxLength' => 5 ,
       'backColor' => 0xFFFFFF ,
       'width' => 100 ,
       'height' => 40
     )
    );
 }

  同时 ,  需要将 captacha 添加到 accessRules 里 ,  以允许所有用户访问该方法 . 如下

  添加一个属性:

  public $verifyCode;
          array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
array('captcha', 'captcha', 'allowEmpty'=>!extension_loaded('gd'), 'on'=>'login'),//在rules数组最后添加:

第二在你的视图里面加上以下代码  

  <?php $this->widget('CCaptcha'); ?>
// 下面这个可以点击图片进行换验证码
 <div><?php $this->widget('CCaptcha',array('showRefreshButton'=>false,'clickableImage'=>true,'imageOptions'=>array('alt'=>'点击换图','title'=>'点击换图','style'=>'cursor:pointer'))); ?></div>

第三 我们需要在我们的 form model 中添加一个 verifycode 的属性来存放用户输入的验证码,然后通过 captcha 验证器来验证用户输入的验证码的准确性。

  public $verifyCode;
并在rules中添加如下
public function rules()
{
 return array(
...
array('verifyCode', 'captcha', 'on'=>'login', 'allowEmpty'=> !extension_loaded('gd')),
...
    );
}

  验证码为什么没有刷新的原因:

  后台登陆调用验证码,点击验证码不刷新,没有反应(所有验证码配置,参数都是正确的)。找错的时候发现可以刷新验证码的页面比不可以刷新验证码的页面多了一段 js 代码,用来处理点击验证码刷新的事件。

  为什么会少了一段代码?原来就是因为控制器分别调用了 renderPartial 和 render. 下面就说说它们的区别:

  在进行页面输出渲染的时候。

  render  输出父模板的内容,将渲染的内容,嵌入父模板。

  renderPartial  则不输出父模板的内容。只对本次渲染的局部内容,进行输出。

  同时还有个重要的区别:

  render  函数内部默认执行 processOutput($output) 函数, 会将把组件,比如 CTreeView  里面注册到 CClientScript  里面的需要的脚本进行渲染输出。

  而 renderPartial()  默认不自动渲染输出客户端脚本,需要进行参数的指定,才会输出:

  renderPartial($view,$data=null,$return=false,$processOutput=false)

  指定 processOutput  为  true  即可。

  就像我们遇到的问题,用 renderPartial 时,页面没有输出验证码刷新的那段 js,所以显示不正常。

更多问题到问题求助专区http://bbs.houdunwang.com/

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为手机删除qq聊天记录还能恢复吗 曙光英雄怎么登录以前的账号,曙光英雄曙光英雄客户端在哪里下载? 曙光英雄怎么注销账号 详细注销方法分享 曙光英雄怎么注销账号-账号注销方法介绍 六大茶类之青茶知识大科普 六大茶类香气类型之青茶(乌龙茶)茶香 六大茶类之青茶 简单认识六大茶类之青茶 一文带你全面认识六大茶类中的青茶,速来围观 识茶笔记:六大茶类之青茶篇 哔哩哔哩怎么设置默认关闭弹幕_哔哩哔哩设置默认关闭弹幕方法[多图]_百... 武汉哪些城中村 win10玩极品飞车12没反应win10玩极品飞车12没反应解决办法 大岭山十大酒店排名,松山湖风景区酒店推荐一下 东莞有多少家5星级酒店_城家东莞松山湖科学城店隔离的是什么酒店 建行营业厅周六周日上班时间是什么时候? 农村地区的女儿在父母过七十岁生日有什么讲究 农村过生日是什么意思啊 农村老人家过生日用什么白酒气派? 中国好声音还转腚吗 正负号加减符号怎么打? 无证房子拆迁如何赔 无证房属于违章建筑吗?无证房拆迁可领补偿吗? 房屋拆迁房产证如何办 白山有几家私立学校 有关联想帐号使用问题,详见补充 如何将华为手表和门禁卡绑定 门禁卡怎么放在手表里 小米蓝牙耳机是哪个代工的 公积公益金支出指什么 寻找yii大神,验证码出了以下这种问题该怎么解决 yii做验证码的时候这样写'class' =&gt; 'system.web.widgets.captcha.Cap... yiis是什么意思? 为什么我的电脑没有关机选项了? 为什么微信能收到信息但发不出去? 无线路由器怎么进入后台设置? 家里的无线路由器怎样进入后台设置 怎么样才能进入到无线路由器的后台管理页面? 路由器怎么进后台设置啊? 无线路由器怎么进入管理后台? ThinkPadX1Carbon怎么恢复出厂设置? 怎么恢复thinkpad电脑的bios密码? 澳柯玛自动上‌水壶烧水快吗‌? 澳柯玛电热水壶保温功能 澳柯玛上水壶好不好用呀? 民国绿泥适合泡什么茶 民国绿泥适合泡哪种茶 民国绿泥通过古龙窑烧会不会变黑 192.168.1.1怎么登录路由器? Linux 高性能网络开发库开源软件 如何登陆路由器设置WIFI密码