codeigniter проверяет сеанс пользователя в каждом контроллере

У меня есть эта приватная сессия в одном из моих контроллеров, который проверяет, вошел ли пользователь в систему:

function _is_logged_in() { $user = $this->session->userdata('user_data'); if (!isset($user)) { return false; } else { return true; } } 

Проблема в том, что у меня несколько контроллеров. Как я могу использовать эту функцию в этих других контроллерах? Переопределение функции в каждом контроллере не очень «СУХОЙ».

Есть идеи?

Solutions Collecting From Web of "codeigniter проверяет сеанс пользователя в каждом контроллере"

Другой вариант – создать базовый контроллер. Поместите функцию в базовый контроллер и затем наследуйте ее.

Чтобы добиться этого в CodeIgniter, создайте файл с именем MY_Controller.php в папке с библиотеками вашего приложения.

 class MY_Controller extends Controller { public function __construct() { parent::__construct(); } public function is_logged_in() { $user = $this->session->userdata('user_data'); return isset($user); } } 

Затем сделайте свой контроллер наследуемым от этого базового контроллера.

 class X extends MY_Controller { public function __construct() { parent::__construct(); } public function do_something() { if ($this->is_logged_in()) { // User is logged in. Do something. } } } 

Поместите его в помощник и выполните автозагрузку.

хелперы / login_helper.php:

 function is_logged_in() { // Get current CodeIgniter instance $CI =& get_instance(); // We need to use $CI->session instead of $this->session $user = $CI->session->userdata('user_data'); if (!isset($user)) { return false; } else { return true; } } 

конфиг / autoload.php:

 $autoload['helper'] = array('login'); 

Затем в контроллере вы можете позвонить:

 is_logged_in(); 

Вы можете достичь этого, используя вспомогательный и конструктор CodeIgniter.

  1. Вы можете создать собственный помощник my_helper.php, в котором написана ваша функция

     function is_logged_in() { $user = $this->session->userdata('user_data'); if (!isset($user)) { return false; } else { return true; } } 
  2. В контроллере, если его login.php

     class Login extends CI_Controller { public function __construct() { parent::__construct(); if(!is_logged_in()) // if you add in constructor no need write each function in above controller. { //redirect you login view } } 

Получите все данные пользователя из сеанса.

В контроллере ,

 $userData = $this->session->all_userdata(); 

В представлении ,

 print_r($userData); 

Я думаю, что использование крючков довольно просто. Просто создайте крючок, чтобы проверить $this->session->user . Он будет вызываться в каждом запросе.

Просто добавьте это в свой основной файл ci_controller папки в функции __construct (), чтобы проверить весь контроллер ():

 function __construct() { parent::__construct(); if(! $user = $this->session->userdata('user_data');) { return false; } }