Я хочу, чтобы пользователь не получал доступ к определенному методу контроллера, когда сеанс не установлен. Для этого я могу проверить сеанс во всем методе, и если задан сеанс, перейдите только к файлу 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, как только «непроверенный» сеанс будет обнаружен, когда пользователь переходит к контроллеру панели мониторинга. Но я хочу предоставить доступ к некоторому методу контроллера панели. Не все методы. Где, когда этот код перенаправляется всякий раз, когда обнаружен сеанс, и не дает доступа к любому методу контроллера панели.
Проверьте это Это может помочь вам
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 */ } }
Вы можете изменить функцию _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
пустым или нет