0

我需要检查用户是否登录。

我在控制器中有很多功能,所以我在构造函数中检查它。但它进入了无限循环。

问题是:无限循环。

  function __construct()
    {
        parent:: __construct();
        $this->is_logged_in();
        $this->clear_cache();
    }



 function is_logged_in()
{
            if( !class_exists('CI_Session') ) $this->load->library('session');

    if( $this->session->userdata('login') )
    {
        $data['name'] = $this->session->userdata('username');       

    }
    else
    {
        redirect(base_url('admin/login'));
    }

}

我不想$this->is_logged_in()在所有功能/页面中使用。

4

3 回答 3

0

@艾伦

它应该是

function __construct()
{
    parent:: __construct();
    if (!($this->uri->segment(2) == 'admin' && $this->uri->segment(3) == 'login'))
        $this->is_logged_in();
    $this->clear_cache();
} 

检查 if 条件。

于 2013-05-28T14:25:45.500 回答
0

丑陋的黑客将是:

function __construct()
{
    parent:: __construct();
    if (($this->uri->segment(2) == 'admin') && ($this->uri->segment(3) != 'login'))
        $this->is_logged_in();
    $this->clear_cache();
}  

我确信有更好的方法,并且段部分可能已关闭,请查看http://ellislab.com/codeigniter/user-guide/libraries/uri.html了解更多信息。

于 2013-05-28T14:12:53.407 回答
0

如果您不想在所有功能或页面上使用它,您可能想要创建一个核心控制器然后在那里进行检查application/core

class MY_Controller Extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    protected function _is_logged_in()
    {
        if( !class_exists('CI_Session') ) $this->load->library('session');

        if( $this->session->userdata('login') )
        {
        $data['name'] = $this->session->userdata('username');       

        }
        else
        {


       if ($this->uri->segment(2) == 'admin' && $this->uri->segment(3) !== 'login')
        redirect(base_url('admin/login'));
        }
    }
}

然后像这样扩展它:在您要验证登录的所有控制器上,或者您可以 $this->_is_logged_in()直接将该功能放在您的MY_Controller强制所有扩展它的控制器上进行检查。由你决定

class admin Extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->_is_logged_in();
    }
}

class user Extends MY_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->_is_logged_in();
    }
}

我使用了protected,这样只有扩展的类my_controller才能使用它,并在名称处添加un下划线,因此无法通过url访问它

于 2013-05-28T14:28:45.267 回答