CodeIgniter - How to check session to be used at every methods

前端 未结 3 1066
无人及你
无人及你 2021-01-05 09:27

Let say at my controller named Book, I have many methods, such as get_book(); read_book(); remove_book();

<
相关标签:
3条回答
  • 2021-01-05 09:56

    You don't necessarily need to do that. Simply put the login check code in the constructor and you're all set!

    class Book extends CI_Controller
    {
        public function __construct()
        {
            if ($this->is_logged_in())
            {
                // redirect to home
            }
        }
    
        public function get_book()
        {
            ...
        }
    
        // The rest of the code...
    }
    
    0 讨论(0)
  • 2021-01-05 10:09

    You can use the method in constructor of controller, like:

    if ( ! $this->session->userdata('logged_in'))
        {   
                redirect('login');
        }
    
    
    0 讨论(0)
  • 2021-01-05 10:10

    Create a file called MY_controller.php (the prefix can be edited in config file) in /application/core:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class MY_Controller extends CI_Controller {
    
    
        function __construct()
        {
    
            parent::__construct();
    
            //Initialization code that affects all controllers
        }
    
    }
    
    
    class Public_Controller extends MY_Controller {
    
        function __construct()
        {
            parent::__construct();
    
            //Initialization code that affects Public controllers. Probably not much needed because everyone can access public.
        }
    
    }
    
    class Admin_Controller extends MY_Controller {
    
        function __construct()
        {
            parent::__construct();
            //Initialization code that affects Admin controllers I.E. redirect and die if not logged in or not an admin
        }
    
    }
    
    class Member_Controller extends MY_Controller {
    
        function __construct()
        {
            parent::__construct();
    
            //Initialization code that affects Member controllers. I.E. redirect and die if not logged in
        }
    
    }
    

    Then anytime you create a new controller, you decide what access it requires

        class Book extends Member_Controller {
    
            //Code that will be executed, no need to check anywhere if the user is logged in. 
            //The user is guaranteed to be logged in if we are executing code here.
    
    //If you define a __construct() here, remember to call parent::__construct();
        }
    

    This cuts code duplication a lot, since if you need another member controller other than Book you can just extend the Member_Controller. Instead of having to do the checks in all of them.

    0 讨论(0)
提交回复
热议问题