Ошибка проверки входа в систему Codeigniter в конструкции / бесконечном цикле

Мне нужно проверить, зарегистрирован пользователь или нет.

У меня есть много функций в контроллере, поэтому я проверяю это в функции конструкции. но его вход в бесконечный цикл.

проблема: бесконечный цикл.

  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() во всех функциях / страницах.

3 ответа

Возможно, вы захотите создать основной контроллер, а затем выполнить проверку там, если вы не хотите использовать его на всех своих функциях или страницах на 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();
    }
}

Я использовал защищенный, так что только классы, которые расширяются my_controller можете использовать его и добавить подчеркивание в имени, чтобы к нему нельзя было получить доступ через URL

Гадкий хак будет:

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 для получения дополнительной информации.

@Allan

Так должно быть

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

Проверьте условие if.

Другие вопросы по тегам