用户
 找回密码
 入住 CI 中国社区
搜索
查看: 11992|回复: 22
收起左侧

[讨论/交流] 后台程序设计思想(含登录设计)

  [复制链接]
发表于 2011-3-8 10:50:55 | 显示全部楼层 |阅读模式
本帖最后由 gzwazz 于 2011-3-8 10:52 编辑

我们在设计后台程序的时候都需要通过session等方式,而纯的php程序设计我们都需要把判断放在一个网页里,然后加载他.下面是我在CI2.0下的日常使用方法
设计思想如下
dd.jpg
第一步:写类
1、建新文件MY_xxx.php(说明一下,必须是MY_打头,后面的自已乱取,记住可放在application/core下,系统会自动载它,如果放在libraries下需要手动加代码)
程序如下:
<?php if (!defined('BASEPATH')) exit('No direct access allowed.');
//前台网页继承这个类
class QT_u  extends CI_Controller{          
function __construct()
    {
        parent::__construct();               
        //这里可以放置前台的相关配置,根据个人需要
               
    }
}
class HT_C  extends CI_Controller {
function __construct()
    {
        parent::__construct();
        session_start();
                $this->load->helper('url');//我用来解决相关路径问题。可以与本例无关
                /** 检查登陆 */               
                if( ! isset($_SESSION['userid'])){                       
                         redirect('admin/index/login');
                }
    }

}

2、如何继承使用,如下:
class News extends HT_C
{       
        function __construct()
    {
        parent::__construct();
               
    }       
}
这样就行了,这样需要news下面的方法都会自动去判断登录状态。
前台对应继承相应的前台类就行了
3、登录设计


   function check_login(){       
                //登录验证
                header('Content-Type: text/html; charset=gbk');
                $username = $this->input->post('username', TRUE);
                $password = $this->input->post('password', TRUE);
               
                $username = mysql_escape_string($username);
                $password = mysql_escape_string ($password);                       
               
                if (empty($username)||empty($password)){
                        exit("<script>alert('用户名或密码不能为空!');window.history.go(-1)</script>");
                }
                $this->load->database();//数据库连接
                $query = $this->db->query("select * from admin where username = '".$username."' and password='".md5 ( $password ) ."'");
                if ($query->num_rows() > 0) {
                        $user_row = $query->row();
                        $_SESSION['userid'] = $user_row->id;
                        $_SESSION['username'] = $user_row->username;
                        $_SESSION['super'] = $user_row->super;                       
                        redirect('admin/index/index');
                }else{
                        exit("<script>alert('用户名或密码不正确!');window.history.go(-1)</script>");
                }
        }
相信大家能看得懂
4、退出:
function login_out(){       
           //退出
                if(isset($_SESSION["userid"])) {
                        unset($_SESSION['userid']);
                }       
         redirect('admin/index/login');
        }

请大家见谅,发贴有点乱。
发表于 2016-6-28 00:01:27 | 显示全部楼层
如何使用Codelobster呢?都不知道如何和网上域名,数据库做关联
发表于 2011-3-9 11:18:41 | 显示全部楼层
我个人觉得登录的用户名密码的验证应该交给后端的model来处理,然后返回。controller负责流程,model负责数据的处理,增删改和验证。这样是不是比较符合mvc的思想。
发表于 2011-3-9 11:26:51 | 显示全部楼层
支持一下
发表于 2011-3-12 06:58:00 | 显示全部楼层
我个人觉得登录的用户名密码的验证应该交给后端的model来处理,然后返回。controller负责流程,model负责数 ...
mageguoshi 发表于 2011-3-9 11:18



    我挺认同你的说法的
发表于 2011-3-13 15:27:46 | 显示全部楼层
很需要的!!~~~
发表于 2011-3-14 14:07:37 | 显示全部楼层
很喜欢这种文章
发表于 2011-3-14 15:09:38 | 显示全部楼层
我个人觉得登录的用户名密码的验证应该交给后端的model来处理,然后返回。controller负责流程,model负责数 ...
mageguoshi 发表于 2011-3-9 11:18


PHP复制代码
<?php
 
class MY_Controller extends CI_Controller{
 
 
 
/**
 
 * 该控制器是否需要验证登录
 
 * @var boolean
 
 */

 
protected $_auth_login = false;
 
 
 
/**
 
 * 验证登录过程使用到的Session字段
 
 * @var string
 
 */

 
protected $_useridField = 'user_id';
 
 
/**
 
* 禁止重写构造函数,由_init来代替子类初始化构造
 
**/

 
public final function __construct(){
 
parent::__construct();
 
if($this->_auth_login){
 
$this->_isLogin();
 
}
 
//load global config
 
//load global library
 
//load global helper
 
//...
 
//初始化
 
$this->_init();
 
}
 
 
 
/**
 
* 验证是否已登录,该方法可重写
 
**/

 
public function _isLogin(){
 
!isset($_SESSION)?session_start():'';
        /** 检查登陆 */                
        if( ! isset($_SESSION[$this->_useridField])){                        
 
redirect('admin/index/login');
 
}
 
}
 
 
 
/**
 
* 初始化
 
**/

 
public function _init(){
 
 
}
 
}
 
//使用
class Admin_Controller extends MY_Controller{
 
public function _init(){
 
$this->_auth_login = true;
 
}
}
 
复制代码
发表于 2011-3-14 15:36:27 | 显示全部楼层
经典。。。。
发表于 2011-3-14 17:05:14 | 显示全部楼层
我个人觉得登录的用户名密码的验证应该交给后端的model来处理,然后返回。controller负责流程,model负责数 ...
mageguoshi 发表于 2011-3-9 11:18



    同意~
发表于 2011-3-14 23:54:35 | 显示全部楼层
多重继承....

本版积分规则