CodeIgniter没有正确重定向

I'm trying to implement basic section that only a logged-in user can access. I overrided CI_Controller, as follow:

//file created in application/core/MY_Controller.php
class Auth_Controller extends CI_Controller {

    function __construct(){
        parent::__construct();

        $this->load->library('session');

        if ($this->session->userdata('user_logged') !== null){
            redirect(base_url() . 'dashboard');
            die();
        } else {
            redirect(base_url() . 'auth/login');
            die();
        }
    }

And then I extend from Auth_Controller all the other controllers that are only available for the logged-in user, as follow:

class Dashboard extends Auth_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $this->load->view('dashboardView');
    }
}

But after the login is successful, it doesn't redirect to dashboardView.

Anyone knows what is really happening?

You are redirecting infinitely to the Dashboard controller in this part of the code:

if ($this->session->userdata('user_logged') !== null){
    redirect(base_url() . 'dashboard');
    die();
}

Use this instead (redirect to the login form if the user is not logged in):

class Auth_controller extends CI_Controller {

    function __construct(){
        parent::__construct();

        $this->load->library('session');

        // If the user is not logged in
        if ($this->session->userdata('user_logged') === null){
            // Redirect to http://yoursite/auth/login
            // No need for the base_url function, redirect does it for you
            redirect('auth/login'); 
            // You don't have to exit/die, redirect() already does that
        }
    }
}

Opinions

  1. If I check the null, will use like this != null. BUT in CI its a best option to check empty() rather null.
  2. If I use redirect() will use it like this redirect('dashboard');

Code will be

if (!empty($this->session->userdata('user_logged'))) {
    redirect('dashboard');
else {
    redirect('auth/login');
}

Make sure your site will load without index.php in URL. If no search for .htaccess to your site.