CodeIgniter没有正确重定向

时间:2017-10-13 18:14:22

标签: php codeigniter codeigniter-3

我尝试实现只有登录用户才能访问的基本部分。我重写了CI_Controller,如下:

//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();
        }
    }

然后我从Auth_Controller扩展所有其他仅适用于登录用户的控制器,如下所示:

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

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

但是登录成功后,它不会重定向到dashboardView。

任何人都知道到底发生了什么?

2 个答案:

答案 0 :(得分:1)

在这部分代码中,您无限重定向到Dashboard控制器:

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

使用此代码(如果用户未登录,则重定向到登录表单):

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
        }
    }
}

答案 1 :(得分:0)

<强>评论

  1. 如果我检查null,将使用这样的!= null。但CI 是检查empty()而不是null 的最佳选择。
  2. 如果我使用redirect(),则会像redirect('dashboard');
  3. 一样使用它

    代码

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

    确保您的网站在网址中加载时不会显示index.php。如果没有搜索到您网站的.htaccess