Для codeIgniter 3 я изменил ответ Уэсли Мерча на это
// Создать файл приложения / core / MY_Controller.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
$CI = & get_instance();
$CI->load->library('session');
$CI->load->helper('url');
if ( !$this->session->userdata('logged_in'))
{
redirect('login');
}
}
}
Затем в любом контроллере для проверки авторизации я использовал
Класс News extends MY_Controller {// code here}
Если вы используете модули и разные сеансы для пользователей сайта ипользователи-администраторы, вы можете использовать этот код, чтобы идеально перенаправить их на разные страницы входа в систему -
<code>function __construct() {
parent::__construct();
$CI = & get_instance();
$CI->load->library('session');
$CI->load->helper('url');
// echo "<pre>";print_r($this->router);echo "
"; / ** * если веб-мастер затем проверяет сеанс администратора, еще проверяет сеанс пользователя * Но может быть метод некоторых классов, который не 't требует входа в систему, следовательно, также необходимо проверить, является ли * текущий запрос для этих методов, перед проверкой сессии * / // использовать $ this-> config-> item ('webmaster_name'), это вы должны определить // $ config ['webmaster_name'] = "webmaster"; в файле config.php if ($ this-> router-> module == $ this-> config-> item ('webmaster_name'))) {if (! $ this-> session-> userdata ('admin') ['id']) {redirect ($ this-> config-> item ('Webmaster_name') '/ Войти').}} else {if (! $ this-> session-> userdata ('user') ['id']) {redirect ('login');}}}
Если вы также хотите, чтобы пользователи разрешали доступ к некоторым методам с любого конкретного контроллера без входа в систему, вы можете использовать этот код -
<code>function __construct() {
parent::__construct();
$CI = & get_instance();
$CI->load->library('session');
$CI->load->helper('url');
//echo "<pre>"; print_r($this->router);echo "
"; // _ pr ($this-> config-> item ('exclusive_auth')); / ** * если веб-мастер затем проверяет сеанс администратора, иначе проверяет сеанс пользователя * Но может быть метод некоторых классов, который не требует входа в систему, следовательно, также необходимо проверить,* текущий запрос для этих методов перед проверкой сеанса * / if ($ this-> router-> module == $ this-> config-> item ('webmaster_name'))) {if (! $ this-> session-> userdata('admin') ['id']) {redirect ($ this-> config-> item ('webmaster_name'). '/ login');}} else {if (array_key_exists ($ this-> router-> class, $ this-> config-> item ('exclude_auth')) && in_array (метод $ this-> router->, $ this-> config-> item ('exclude_auth') [$ this-> router-> class])) {// echo "экранировать этот метод.Не проверять для сеанса ";} else {if (! $ this-> session-> userdata ('user') ['id']) {redirect ('login');}}}}
Примечание: Вы можете определить пользовательский файл конфигурации для определения исключенных методов, таких как as-
//save file in application/config/without_auth_methods.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$config['exclude_auth']['news'] = array('index', 'view');
$config['exclude_auth']['users'] = array('index');