2012-03-03 3 views
0

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

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

    parent::__construct(); 
} 

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

ответ

4

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

class MY_Controller extends CI_Controller { 

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

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

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

Наконец, вместо того, чтобы использовать $_SESSION суперглобальный PHP для хранения сессии, вы можете рассмотреть воспользовавшись Codeigniter session или an equivalent.

+0

Прохладный, мне нравится это решение. –

+0

Не забудьте вызвать 'parent :: __ construct()'. – hakre

+0

@hakre Спасибо, хороший звонок! – rjz

1

Codeigniter имеет own session, not $_SESSION.

Кроме того, если у вас есть контроллер того же типа, вы можете написать базовый контроллер и перейти от него. Базовый контроллер, чем может содержать код для проверки доступности контроллера, и вам не нужно писать это в каждом классе контроллера, который вы создаете. См. How do I extend the code igniter controller class?.

+0

'Codeigniter имеет собственную сессию, а не $ _SESSION.' - они делают COOKIE о том, что мне нужно сеанс, потому что тогда люди может просто изменить свое имя пользователя через cookie и войти в любой аккаунт. –

+0

Это было просто сказано. Иногда возникают вопросы, и тот, кто спросил, не знал об этом. Вы * можете * использовать '$ _SESSION', так как это PHP. То же самое относится к ['extends'] (http://de.php.net/manual/en/keyword.extends.php). – hakre

+0

Есть несколько причин, по которым вы можете использовать собственные сеансы над библиотекой 'session' в Codeigniter, но @ hakre's right - большая часть CI написана по какой-то причине, и это полезно, когда вы можете воспользоваться ею. Посмотрите http://codeigniter.com/wiki/Native_session для красивой собственной оболочки сеанса – rjz

1

функция __construct() {

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

}

function authenticate() 
{ 
    if (!$this->session->userdata('admin_loggedIn')) 
    { 
    redirect('login'); 
    } 
} 
Смежные вопросы