Intereting Posts
Записывать переменные среды apache и читать их в php-скрипте Как исправить ошибку с xml2-config не найден при установке PHP из источников? Как правильно шифровать данные с надлежащей аутентификацией с использованием AES-256-CBC в php? PHP: Как удалить вложенные теги и перенести их не вложенным образом? Класс сеанса PHP php echo vs return, какой способ лучше? Я получаю «синтаксическую ошибку, неожиданную ошибку T_VARIABLE». Я не понимаю, что я делаю неправильно? Как использовать функции MySQL в Propel Измените язык сайта с помощью кнопки простой jsonp не работает с php-сервером Библиотека API REST CodeIgniter Ajax PUT throw 403 Запрещено Есть ли причина, по которой мне нужно использовать stripslashes для представленных пользователем данных? Сортировка многомерного массива с использованием PHP Предварительно установленный Linux для веб-разработчиков? exception `Unable to find entity` после добавления FOSUserBundle

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

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

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

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

Есть идеи?

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

Чтобы добиться этого в 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; } }