Не предоставлять доступ к определенному методу в контроллере, если сеанс не установлен в кодеигниторе

Я хочу, чтобы пользователь не получал доступ к определенному методу контроллера, когда сеанс не установлен. Для этого я могу проверить сеанс во всем методе, и если задан сеанс, перейдите только к файлу else перенаправить на определенную страницу. Поскольку у меня есть много методов, я не хочу, чтобы пользователь получал доступ, если сеанс не установлен. Его объем должен пройти весь метод и проверить сеанс. Есть ли какой-либо быстрый способ получить эту функциональность.

Я попытался проверить, что сеанс – это метод конструктора контроллера, но он работает для всех методов. Но я хочу, чтобы только специальный метод блокировал, если сеанс не установлен. Как это сделать.

Пример:

class dashboard extends CI_Controller { function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('dbmodel'); $this->load->helper('url','form'); //verified user check if($this->session->userdata("unverified") != FALSE) { redirect("verify_user"); } } //verified user check } 

Выше кода перенаправляется на контроллер verify_user, как только «непроверенный» сеанс будет обнаружен, когда пользователь переходит к контроллеру панели мониторинга. Но я хочу предоставить доступ к некоторому методу контроллера панели. Не все методы. Где, когда этот код перенаправляется всякий раз, когда обнаружен сеанс, и не дает доступа к любому методу контроллера панели.

Related of "Не предоставлять доступ к определенному методу в контроллере, если сеанс не установлен в кодеигниторе"

Проверьте это Это может помочь вам

 class MY_controller extends CI_controller{ function __construct() { parent::__construct(); } function _required_user($params =array()){ $action =$this->router->fetch_method(); if(empty($params['except'])) $params['except'] =array(); if(empty($params['only'])) $params['only'] =array(); if(count($params['except']) > 0 && in_array($action,$params['except'])) return true; if(count($params['only']) > 0 && in_array($action,$params['only']) && $this->session->userdata('is_login')) return true; if($this->session->userdata('is_login')) return true; redirect('login'); } } class dashboard extends MY_Controller { function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('dbmodel'); $this->load->helper('url','form'); $this->_required_user(array('except'=>array('index'))) } function add(){ /* Session required */ } function edit(){ /* Session required */ } function index(){ /* no session required */ } } class content extends MY_Controller{ function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('dbmodel'); $this->load->helper('url','form'); $this->_required_user(array('only'=>array('index'))) } function add(){ /* no Session required */ } function edit(){ /* no Session required */ } function index(){ /* session required */ } } class Myaccount extends MY_Controller{ function __construct() { parent::__construct(); /* for all functions session required */ $this->_required_user() } function edit(){ /* session required */ } function save(){ /* session required */ } } в class MY_controller extends CI_controller{ function __construct() { parent::__construct(); } function _required_user($params =array()){ $action =$this->router->fetch_method(); if(empty($params['except'])) $params['except'] =array(); if(empty($params['only'])) $params['only'] =array(); if(count($params['except']) > 0 && in_array($action,$params['except'])) return true; if(count($params['only']) > 0 && in_array($action,$params['only']) && $this->session->userdata('is_login')) return true; if($this->session->userdata('is_login')) return true; redirect('login'); } } class dashboard extends MY_Controller { function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('dbmodel'); $this->load->helper('url','form'); $this->_required_user(array('except'=>array('index'))) } function add(){ /* Session required */ } function edit(){ /* Session required */ } function index(){ /* no session required */ } } class content extends MY_Controller{ function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('dbmodel'); $this->load->helper('url','form'); $this->_required_user(array('only'=>array('index'))) } function add(){ /* no Session required */ } function edit(){ /* no Session required */ } function index(){ /* session required */ } } class Myaccount extends MY_Controller{ function __construct() { parent::__construct(); /* for all functions session required */ $this->_required_user() } function edit(){ /* session required */ } function save(){ /* session required */ } } 
  1. Только параметр: сеанс проверки существует только для заданных функций / функций
  2. За исключением параметра: Не проверяйте сеанс для заданных функций / функций
  3. Нет Параметр: проверка сеанса для всех функций в контроллере и перенаправление

Вы можете изменить функцию _reuired_user в соответствии с вашим требованием

вы можете попробовать следующее: если это поможет

создайте в своем приложении / основной папке класс с именем MY_Controller, что-то вроде

 class MY_Controller extends CI_Controller { public function checkUserSession() { if($this->session->userdata("unverified") != FALSE) { redirect("verify_user"); } return true; } } 

после этого ваш контроллер панели должен выглядеть так:

 class dashboard extends MY_Controller { public function show_dashboard() { if ($this->checkUserSession()) { //your code } } } 

Создайте библиотеку с любым именем i created Users.

 class Users { public function __construct() { $this->ci =& get_instance(); } function _is_logged() { if(!$this->ci->session->has_userdata('unverified')) { redirect('verify_user'); } } } 

Загрузите библиотеку или поместите ее в автозагрузку в application/config/autoload.php

Затем просто вызовите функцию в верхней части ваших методов, которую вы хотите ограничить.

 function abc() { $this->users->_is_logged(); // your code } 

Это не ответ, а предложение, основанное на моем опыте:

Как разработчик, это легко сделать, как и в вышеупомянутом ответе @ user1048123.

Но, например, если вы обращаетесь к методу (ex: index), для которого сеанс не нужен, но все же function _required_user() метод должен быть обработан до того, как индекс будет отображаться там, где вам нужно передать более крупный массив (например: 30 методов в массиве имя) . Это замедлит время загрузки методов, для которых сеанс не нужен. Поэтому для лучшей проверки производительности сеанс – это метод (в каждом методе), для которого необходимо проверить сеанс.

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

можете ли вы проверить это?

 function __construct() { parent::__construct(); } function chk_login() { if($this->session->userdata('logged_in')) { echo "some action"; } else { redirect('login'); } } в function __construct() { parent::__construct(); } function chk_login() { if($this->session->userdata('logged_in')) { echo "some action"; } else { redirect('login'); } } 

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

 <?php class dashboard extends CI_Controller { function __construct() { parent::__construct(); $this->load->library('session'); $this->load->model('dbmodel'); $this->load->helper('url','form'); } public function index() { $user = $this->session->userdata("unverified")//asign session value to variauble $result = $this->dbmodel->check_user($user);//check user validity if(empty($result)) { //user is not verified $this->load->view('unverified_loging'); } else { //user is verified $this->load->view('verified_loging'); } } 

В модели

  public function check_user($user) { $query = $this->db->query("SELECT * FROM user WHERE <argument here>");//check with database $result = $query->result_array(); return $result; } 

Если пользователь удовлетворен пользователем validity он передает данные в $result . Иначе, если он не удовлетворен validity он вернет $result как NULL .

Таким образом, в контроллере вы можете проверить, будет ли $result пустым или нет