1

我有登录控件的功能。如果用户没有登录它会重定向到login.php

在我的控制器中,我有很多功能,这些功能代表网站中的页面。所以我必须$this->is_logged_in();在每个函数中调用函数。

例如:

class Admin extends CI_Controller{


        function index(){
            $this->is_logged_in(); // works fine like this
                $this->load->view('admin/welcome_message');
        }

        function users(){
            $this->is_logged_in(); // works fine like this
                $this->load->view('admin/users');
        }

        function comments(){
            $this->is_logged_in(); // works fine like this
                $this->load->view('admin/comments');
        }

}

我不想在所有函数中调用这个函数。当我在构造结果中调用它时:无限循环。

4

4 回答 4

3

在您的 application/core 文件夹中创建您自己的基本控制器,并在其构造函数中执行以下操作:

class MY_Controller extends CI_Controller {

    public function __construct() 
    {
        parent::__construct();

        // Check that the user is logged in
        if ($this->session->userdata('userid') == null || $this->session->userdata('userid') < 1) {
            // Prevent infinite loop by checking that this isn't the login controller               
            if ($this->router->class != '<Name of Your Login Controller') 
            {                        
                redirect(base_url());
            }
        }   
    }
}

然后您的所有控制器只需要继承您的新控制器,然后所有请求都会检查用户是否已登录。

如果需要,还可以通过检查$this->router->method是否匹配特定操作来更具体。

于 2013-05-28T19:27:16.737 回答
1

添加此构造函数,您不必在每个构造函数上编写该函数。

 function __construct() {
           parent::__construct();
           if(!$this->is_logged_in()):
                 redirect(base_url()."login.php");
       }
于 2013-05-28T16:10:54.483 回答
0
public function __construct()
{
    parent::__construct();
        session_start();

        if(!isset($_SESSION['username'])){
            redirect('login');
        }

}

定义谁是父母并检查函数结果。完毕

于 2013-05-28T16:13:24.940 回答
0

做这种事情的最好方法是使用 hooks 在 codeIgniter 的 hooks 中使用 session 数据

这将是您所需要的。

于 2013-05-28T16:25:31.637 回答