入住 CI 中国社区 登录
CodeIgniter 中国开发者社区 返回首页

mantou的个人空间 https://codeigniter.org.cn/forums/?24793 [收藏] [复制] [分享] [RSS]

日志

刚刚学习用到的CI管理员验证登陆

热度 1已有 1385 次阅读2012-12-2 10:51 |个人分类:CI框架| 管理员, 验证

application/libraries 下,新建captcha_code.php,代码如下:
<?php
class Captcha_code
{
    var $width='68';
    var $num='4';
    var $height='24';
    var $name='randcode';
    
    public function __construct($conf="")
    {
        if($conf!="")
        {
            foreach($conf as $key=>$value)
            {
                $this->$key=$value;
            }
        }
    }
    
    function show()
    {
        Header("Content-type: image/gif");
        /*
        * 初始化
        */
        $border = 1;                            //是否要边框 1要:0不要
        $how = $this->num;                        //验证码位数
        $w = $this->width;                        //图片宽度
        $h = $this->height;                        //图片高度
        $fontsize = 5;                            //字体大小
        $alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";    //验证码内容1:字母
        $number = "023456789";                    //验证码内容2:数字
        $randcode = "";                            //验证码字符串初始化
        srand((double)microtime()*1000000);        //初始化随机数种子
        
        $im = ImageCreate($w, $h);                //创建验证图片
        
        /*
        * 绘制基本框架
        */
        $bgcolor = ImageColorAllocate($im, 255, 255, 255);    //设置背景颜色
        ImageFill($im, 0, 0, $bgcolor);                        //填充背景色
        if($border)
        {
            $black = ImageColorAllocate($im, 0, 0, 0);        //设置边框颜色
            ImageRectangle($im, 0, 0, $w-1, $h-1, $black);    //绘制边框
        }
        
        /*
        * 逐位产生随机字符
        */
        for($i=0; $i<$how; $i++)
        {   
            $alpha_or_number = mt_rand(1, 1);                //字母还是数字
            $str = $alpha_or_number ? $alpha : $number;
            $which = mt_rand(0, strlen($str)-1);            //取哪个字符
            $code = substr($str, $which, 1);                //取字符
            $j = !$i ? 4 : $j+15;                            //绘字符位置
            $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100));    //字符随即颜色
            ImageChar($im, $fontsize, $j, 3, $code, $color3);//绘字符
            $randcode .= $code;                                //逐位加入验证码字符串
        }
        
        /*
        * 添加干扰
        */
        for($i=0; $i<5; $i++)//绘背景干扰线
        {   
            $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线颜色
            ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线
        }   
        for($i=0; $i<$how*15; $i++)//绘背景干扰点
        {   
            $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色
            ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干扰点
        }
        
        //把验证码字符串写入session
        //$this->session->set_userdata(array($this->name=>$randcode));
        $CI = & get_instance();
        $CI->session->set_userdata($this->name, $randcode);

        $_SESSION[$this->name]=$randcode;
        /*绘图结束*/
        Imagegif($im);
        ImageDestroy($im);
        /*绘图结束*/
    }
}
?>

controllers 处加入:
    //管理后台 - 登陆
    public function login()
    {
        if( ! empty($_POST) )                            //如果有数据POST过来,执行下面
        {
            if(strtoupper($_POST['vdcode']) == $this->session->userdata('yzm') )    //验证码正确
            {
                if($this->admin_model->login(            //传POST过来的用户名和密码过去
                    array(
                        'username'=>$_POST['username'],
                        'password'=>$_POST['password']
                )))
                {                                        //登陆成功
                    redirect('admin/admin/index');        //跳转到后台首页
                }
                else                                    //登陆失败,弹出提示信息
                {
                    echo '<script type="text/javascript">alert("您输入的登陆信息有误!");</script>' ;
                }
            }
            else                                                                    //验证码不正确
            {
                echo '<script type="text/javascript">alert("验证码有误!");</script>' ;
            }
        }
        $this->load->view('admin/admin/login');            //视图模板
    }
    //管理后台 - 验证码
    public function yzm()
    {
        $conf['name']='yzm';                            //作为配置参数
        $this->load->library('captcha_code',$conf);        //加载自定义的captcha_code
        $this->captcha_code->show();                    //显示验证码
    }

视图处加入:
        <form method="post" action="">
        <dl>
            <dt>用户名:</dt>
            <dd><input type="text" name="username"/></dd>
            <dt>密&nbsp;&nbsp;&nbsp;码:</dt>
            <dd><input type="password" name="password" class="alltxt"/></dd>
            <dt>验证码:</dt>
            <dd><input type="text" name="vdcode" id="vdcode"/>
            <img id="imgcode" src="<?php echo site_url('admin/admin/yzm'); ?>" title="看不清?点击更换" onclick="this.src='<?php echo site_url('admin/admin/yzm');?>/'+ Math.random()" align="absmiddle" style="cursor: pointer;" />
            <a href="javascript:viod()" onclick="document.getElementById('imgcode').src='<?php echo site_url('admin/admin/yzm');?>/'+ Math.random()">看不清? </a>
            </dd>
            <dt>&nbsp;</dt>
            <dd><button type="submit" class="login-btn" onclick="this.form.submit();">登录</button></dd>
        </dl>
        </form>

路过

雷人
1

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 入住 CI 中国社区