Если пользователь вошел или нет в CodeIgniter - PullRequest
0 голосов
/ 03 марта 2012

Когда пользователь входит в систему или когда он регистрируется, его $_SESSION['username'] получает значение своего имени пользователя. Я хочу разрешить им доступ к определенным контроллерам, только если они зарегистрированы. Но мне не нравится идея написать это:

function __construct()
{
  session_start();
  if(empty($_SESSION['username']))
     die();

  parent::__construct();
}

в каждом контроллере я не хочу, чтобы незаметные люди видели. Есть ли лучший способ сделать это? Спасибо.

Ответы [ 3 ]

4 голосов
/ 03 марта 2012

Вы можете рассмотреть возможность расширения вашего базового класса контроллера (см. Статья Вики Codeigniter о расширении класса ), чтобы обеспечить функцию require_login:

class MY_Controller extends CI_Controller {

  protected function require_login() {
    if(empty($_SESSION['username']))
      die();
    }
  }

Получив это, вы можете вызвать require_login() в конструкторе каждого контроллера, который вы хотите защитить:

function __construct() {
  $this->require_login();
}

Наконец, вместо использования PHP 101 * superglobal для хранения сессий, вы можете рассмотреть возможность использования библиотеки Codeigniter session или эквивалента .

1 голос
/ 03 марта 2012

функция __construct () {

parent::Controller();
$this->authenticate();

}

function authenticate()
{
   if (!$this->session->userdata('admin_loggedIn'))
  {
  redirect('login');
  }
}
1 голос
/ 03 марта 2012

Codeigniter имеет собственный сеанс, а не $_SESSION.

Кроме того, если у вас есть контроллер того же типа, вы можете написать базовый контроллер и расширить его. Базовый контроллер, который может содержать код для проверки, доступен ли контроллер, и вам не нужно писать его в каждом создаваемом вами классе контроллера. См. Как расширить класс контроллера воспламенителя кода? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...