Php 视图中的Codeigniter访问会话

Php 视图中的Codeigniter访问会话,php,codeigniter,session,Php,Codeigniter,Session,型号: function login(){ $data = array('username' => $_POST['username'], 'password' => $_POST['password']); $this->form_validation->set_rules('username', 'Username', 'required|callback_username_check'); $this->form_validation-

型号:

function login(){
    $data = array('username' => $_POST['username'], 'password' => $_POST['password']);
    $this->form_validation->set_rules('username', 'Username', 'required|callback_username_check');
    $this->form_validation->set_rules('password', 'Password', 'required');

    if($this->form_validation->run() == FALSE){
        $this->load->view('Login');
    } else {
        $result = $this->LoginModel->account_check($data);
        if($result){
            if($result['status'] = 'admin'){
                $isLoggedin = array('user_type' => 'administrator' ,'admin_name' => $result['username'] , 'is_loggedin' => TRUE);
                $this->session->set_userdata($isLoggedin);
                $this->load->view('admin/homepage'); 
            } else if($result['status'] = 'user'){
                $isLoggedin = array( 'user_name' => $row['username'] , 'user_type' => 'user' ,  'is_loggedin' => TRUE);
                $this->session->set_user($isLoggedin); 
                $this->load->view('user/homepage'); 
            } 
        }
    }
}

function username_check($username){
    $result = $this->LoginModel->username_check($username);
    if($result != TRUE){
        $this->form_validation->set_message('username_check' , 'Username does not exist');
        return FALSE; 
    } else return TRUE;
}
我如何访问用户数据,我将使用它运行一个如果每个视图,如果一个帐户登录,如果它是一个管理员帐户

如果我100%正确的话,我想读一些关于我如何使用课程的意见

还有,我有一个问题

此代码

阻止对视图的直接访问,阻止视图访问,但不特别检查用户是否登录


我如何在课程中利用这一点。如果是冗余的,请告诉我,

Codeigniter使用第二个参数将数据传递到视图:

function username_check($username){
    $query = $this->db->get_where( 'admin' , array('username' => $username))->result_array();
    if(!empty($query)){
        return TRUE;
    }else{
        $query = $this->db->get_where( 'user_mst', array('username' => $username))->result_array();
        if(!empty($query)){
            return TRUE;
        }else return FALSE;
    }
}

function account_check($data){
    $query = $this->db->get_where( 'admin' , array( 'username' => $data['username'] , 'password' => $data['password'] ))->result_array();
    if(!empty($query)){
        foreach($query as $row){
            $result['status'] = 'admin';
            $result['username'] = $row['username'];
            $result['password'] = $row['password'];
            return $result; 
        }
    } else{
        $query = $this->db->get_where( 'user_mst' , array( 'username' => $data['username'] , 'password' => $data['password'] ))->result_array();
        if(!empty($query)){
            foreach($query as $row){
                $result['status'] = 'user';
                $result['username'] = $row['username'];
                $result['password'] = $row['password'];
                return $result; 
            }
        }
    }
}
不传递任何数据

$this->load->view('user/homepage');
将传入可以使用的$data变量。()

另一点——在成功登录后,我会考虑使用重定向()函数,而不是在<强>登录< /强>方法中加载所需的视图。使用URL帮助器执行此操作()


希望这能有所帮助。

关于基本路径问题,您没有。所有页面访问都通过CI控制器。检查用户是否在此登录,然后加载视图。会话变量中有用户loggin,所以只需使用它作为检查。您能解释更多吗?我不再需要基本路径。嗯,好的。所以基本上,我只需检查每个控制器是否有用户登录。创建构造函数对吗?我认为$session是一个特例,比如如果你设置它,它实际上嵌入到你的浏览器中。我有时使用重定向,因为刷新选项。但是负载视图稍微简单一些,并不复杂。这与安全性有关吗?使用重定向的原因是将登录方法与应用程序分离。如果您创建一个新的控制器来检查构造函数中的登录会话变量,那么每个页面都会自动检查该变量。如果失败-将用户指向登录页面。您能解释一下吗?如何重定向单独的登录方法。我正在努力学习编程,但我希望编程时不要有多余的代码/冗余。如果重定向与负载视图有什么不同,你能告诉我吗?这样想。如果您已登录,并且希望转到该站点的主页,则必须再次登录。但是,如果您有一个名为“app”的类,请转到site.com/app使用该站点,而无需再次登录。在构造函数中,您将检查是否设置了用户登录的会话。如果没有,则重定向回登录类(site.com/login)。不过,我们现在偏离了原来的问题,这里不是给出完整答案的最佳地点。
$this->load->view('user/homepage', $data);