`
zhengdl126
  • 浏览: 2538588 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

(二)ZendFramework之验证码

阅读更多

增加CaptchaController 实现验证码功能

 

 

    1 修改App/config/resource.ini

captcha = default:captcha

 

    2 修改library/common/pluin/myacl.php

$this->allow('guest' ,'default:captcha' ,array('index' ));

 

以上两步是增加访问权限,否则控制器无法识别。

 

 

3 修改前台模板link.php

<img id="imgcode" style="margin-bottom:-5px;cursor:pointer;" onclick="javascript:ChangImg()" src="<?= $this->makeurl('captcha' ,'index' );?> ">

<script type="text/javascript" language="Javascript" >

    function ChangImg()

    {  

       var checkcode = $("#imgcode").get(0);

       var dt = new Date();

       checkcode.src = "<?= $this->makeurl('captcha' ,'index' );?> "; 

    }

</script>

 

 

 

    4 新建 /app/modules/default/controllers/CaptchaController.php

<?php

require('CommonController.php');

class CaptchaController extends CommonController

{

    function init() {

        // 执行父类中的构造函数

        parent::init();

    }

   

    /**

      * 链接首页

      *

      */

    public function indexAction()

    {

        Zend_Loader::loadClass('Common_Plugin_MyCaptcha');

        $myCaptcha = new Common_Plugin_MyCaptcha();

        $myCaptcha->image();//生成图像

    }

}

 

 

 

    5 提交后的验证判断

<input name="imagecode" id="imagecode" class="input" value="" size="20" tabindex="20" type="text"></label>

 

if ($this->_request->isPost())

{
//登陆验证
$filter = new Zend_Filter_StripTags();

require_once 'Zend/Session/Namespace.php' ;

$imagecode = $filter->filter($this->_request->getPost('imagecode' ));

$authCode = new Zend_Session_Namespace('Auth_Code' );// 读取命名的空间

if ($authCode->imagecode!=$imagecode)

{

$this->view->error = " 验证码不正确 !";

echo $this->view->render('login.php' );

exit;

}

}

 

 

最后附上MyCaptcha.php

 

<?php
/**
 * 生成图像验证码
 *
 * 代码来自 ThinkPHP 的 Lib/ORG/Util/Image.class.php 文件,特此对 ThinkPHP 团队表示感谢
 *
 * Custom
 *
 * LICENSE:
 *
 * @category   Common
 * @package    Plugin
 * @copyright  Copyright (c)  PConline
 * @license   
 * @version   
 */

/**
 * Zend_Controller_Plugin_Abstract
 */
require_once 'Zend/Controller/Plugin/Abstract.php';
require_once 'Zend/Session/Namespace.php';

class Common_Plugin_MyCaptcha extends Zend_Controller_Plugin_Abstract
{
    /**
     * 生成图像验证码
     *
     * @param string $length    验证码长度
     * @param string $mode        类型
     * @param string $type        图像格式
     * @param string $width        图像宽度
     * @param string $height    图像高度
     * @return string
     */
    function image($length=4,$mode=1,$type='png',$width=40,$height=20)
    {
        $randval = $this->rand_string($length,$mode);
      
        $authCode = new Zend_Session_Namespace('Auth_Code');//命名空间
        $authCode->imagecode = $randval;
       
        $width = ($length*9+10)>$width?$length*9+10:$width;
        if ( $type!='gif' && function_exists('imagecreatetruecolor')) {
            $im = @imagecreatetruecolor($width,$height);
        }else {
            $im = @imagecreate($width,$height);
        }
        $r = Array(225,255,255,223);
        $g = Array(225,236,237,255);
        $b = Array(225,236,166,125);
        $key = mt_rand(0,3);

        // 背景色(随机)
        $backColor = imagecolorallocate($im, $r[$key],$g[$key],$b[$key]);
        // 边框色
        $borderColor = imagecolorallocate($im, 100, 100, 100);
        // 点颜色
        $pointColor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

        @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);
        @imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor);
        $stringColor = imagecolorallocate($im,mt_rand(0,200),mt_rand(0,120),mt_rand(0,120));
        // 干扰
        for($i=0;$i<10;$i++){
            $fontcolor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
            imagearc($im,mt_rand(-10,$width),mt_rand(-10,$height),mt_rand(30,300),mt_rand(20,200),55,44,$fontcolor);
        }
        for($i=0;$i<25;$i++){
            $fontcolor = imagecolorallocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
            imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pointColor);
        }

        @imagestring($im, 5, 5, 3, $randval, $stringColor);
        $this->output($im,$type);
    }
   
    /**
     * 输出图像
     *
     * @param string $im
     * @param string $type
     */
    function output($im,$type='png')
    {
        header("Content-type: image/".$type);
        $ImageFun='Image'.$type;
        $ImageFun($im);
        imagedestroy($im);     
    }   
   
    /**
     * 产生随机字串,字母和数字混合
     *
     * @param string $len        长度
     * @param string $type        字串类型 (0 字母 1 数字 其它 混合)
     * @param string $addChars    额外字符
     * @return string
     */
    function rand_string($len=4,$type='',$addChars='') {
        $str ='';
        switch($type) {
            case 0:
                $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.$addChars;
                break;
            case 1:
                $chars= str_repeat('0123456789',3);
                break;
            case 2:
                $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$addChars;
                break;
            case 3:
                $chars='abcdefghijklmnopqrstuvwxyz'.$addChars;
                break;
            default :
                // 默认去掉了容易混淆的字符oOLl和数字01,要添加请使用addChars参数
                $chars='ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'.$addChars;
                break;
        }
        if($len>10 ) {//位数过长重复字符串一定次数
            $chars= $type==1? str_repeat($chars,$len) : str_repeat($chars,5);
        }
        if($type!=4) {
            $chars   =   str_shuffle($chars);
            $str     =   substr($chars,0,$len);
        }else{
            // 中文随机字
            for($i=0;$i<$len;$i++){  
              $str.= substr($chars, floor(mt_rand(0,mb_strlen($chars,'utf-8')-1)),1);  
            }
        }
        return $str;
    }
   
}

0
0
分享到:
评论

相关推荐

    Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)

    在本文中,我们将深入探讨如何在Zend Framework中生成验证码并实现其验证功能。验证码是一种防止自动机器人或恶意软件提交表单的有效手段,特别是在处理敏感信息或防止垃圾信息时。Zend Framework提供了一种灵活的...

    最新版的Zend_Framework 手册 中文版

    **Zend Framework 中文手册** **概述** Zend Framework 是一个基于模型-视图-控制器(MVC)架构模式的开源PHP框架,旨在促进Web应用程序的开发。这个“最新版的Zend Framework 手册 中文版”提供了对框架组件的详细...

    Zend_captcha_image点击刷新图片验证码(dojo_ajax)

    1. **Zend_Captcha**: Zend Framework 的验证码组件提供多种类型的验证码,包括图像、音频等。对于图像验证码,它会生成一个随机的字符串并将其转化为图像,以防止爬虫自动识别。开发者可以通过配置参数自定义验证码...

    Programmer's References Guide Zend framework

    ### 二、Zend_Acl - 访问控制列表 #### 引言 Zend_Acl组件用于实现基于角色的访问控制(RBAC),允许开发者定义不同角色对系统资源的访问权限,从而增强应用程序的安全性。 #### 关于资源 在Zend_Acl中,资源...

    Zend Framework实现具有基本功能的留言本(附demo源码下载)

    本文实例讲述了Zend Framework实现具有基本功能的留言本。分享给大家供大家参考,具体如下: 一个留言本…具有的基本功能就是.1.发表留言. 2.回复留言.3.管理留言(修改,删除等操作). 我这里只是写了基本的操作,比如...

    ZF-Vkontakte-SDK:基于Zend Framework 1的轻量级vk.com库

    $ config = Zend_Registry :: get ( 'config' )-&gt; vk ;$ authUri = 'http://mysite.com/vk' ;$ api = new \ Vkontakte \ Api ( $ config -&gt; id , $ config -&gt; key , $ authUri , array ( 'offline' , 'notes' , '...

    解析在zend Farmework下如何创立一个FORM表单

    在Zend Framework下创建FORM表单是基于MVC架构的Web应用开发过程中的一个常见需求。Zend Framework提供了Zend_Form组件,该组件用来生成和处理表单。以下知识点详细解析了如何在Zend Framework环境下创建一个FORM...

    thinkPHP显示不出验证码的原因与解决方法分析

    而对于其他PHP框架如codeigniter、CI(CodeIgniter)、Zend Framework等的了解和学习,不仅可以拓宽我们的技术视野,也能帮助我们更好地解决在ThinkPHP框架中遇到的问题,因为不同框架间存在一些共通的原理和实践方法...

    thinkPHP实现的验证码登录功能示例

    6. ThinkPHP相关资源推荐:为了进一步加深对ThinkPHP的了解,作者提供了相关的资源链接,包括ThinkPHP入门教程、模板操作技巧总结、常用方法总结等,以及对其他流行PHP框架如CodeIgniter、ZendFramework和CI...

    php课程(共100多节)

    77:Zend framework数据库操作之编辑和视图函数 78:PHP+Flash多文件异步上传 swfupload 79:PHP上传RAR压缩包并解压目录 80:ADODB PHP 数据库万能引擎类(上) 81:ADODB PHP 数据库万能引擎类(下) 82:PHP开发...

    BF-Blog0.2.0 多用户系统 [PHP+Sqlite]

    BF-Blog是一款基于PHP5的、ZendFrameWork以及sqlite为数据库支持的blog(网络日志)程序。 演示地址:http://our.uni.cc/blog/nana BF-Blog的部分主要功能包括: *基于CSS+div布局的模板结构,模板样式修改容易; *...

    WCMS v8.3.11 编辑员的CMS.zip

    系统架构:zendframework(精简) smarty(v3)   WCMS功能 新闻分为文章、图集、专题 评论是独立的,可以不和新闻、用户结合起来 用户管理 系统组和用户组 可自定义模板 超时侦测 支持新闻扩展字段EAV设计...

    PHP100视频教程全集112集BT种子【PHP经典】

    PHP100视频教程77:Zend framework数据库操作之编辑和视图函数 PHP100视频教程78:PHP+Flash多文件异步上传 swfupload PHP100视频教程79:PHP上传RAR压缩包并解压目录 PHP100视频教程80:ADODB PHP 数据库万能...

    DBShop电子商务网店系统最新官方

    同时由于强大的特性,也使其学习成本很高,所以目前大家看到的ZendFramework 2 产品相对于其他框架的产品来说并不多。作者(DBShop系统作者)知道国内使用ZF2(ZendFramework 2简称)开发项目的公司有一些,开发产品...

    多语言WCMS v8.2.1 编辑员的CMS 稳定版

    系统架构:zendframework(精简)+smarty(v3) WCMS功能 新闻分为文章、图集、专题 评论是独立的,可以不和新闻、用户结合起来 用户管理 系统组和用户组 可自定义模板 超时侦测 支持新闻扩展字段EAV设计 smarty...

    54dev个人博客系统 1.0

    使用Zend FrameWork 1.10.7内核,集成了SyntaxHighlighter代码高亮和facebox图片浏览插件。 这个BLOG很初级,很菜。开源的目的只是想和有兴趣的人一起学习提高。 安装使用说明: devcom_54dev.zip是数据库文件...

    zf-blog.1.2.rar

    2、验证码启用和允许游客评论的设置;在后台 系统设置-站点信息中新增了这两个选项的设置。开启了验证码则用户登陆和注册,发表评论和留言时需要填写验证码;允许游客评论开启后,游客可以进行匿名评论,如果设置的...

    php100视频原始地址列表整理.doc

    Zendframework - **知识点**: Zend Framework是一个开源的PHP框架,提供了丰富的组件和服务。本节介绍了如何使用Zend Framework进行项目开发。 - **学习目标**: 掌握Zend Framework的用法,提高开发效率。 通过...

    PHP框架应用开发:THINKPHPPPT课件.ppt

    - Zend Framework是一个全面的企业级框架,其组件丰富但学习曲线较陡峭,而THINKPHP更适合快速开发小型到中型项目。 - FleaPHP虽然在某些细节上不如THINKPHP易用,但它的高度定制性和轻量级核心使其在特定场景下更具...

Global site tag (gtag.js) - Google Analytics