Ошибка проверки входа в систему 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.