首页 > 解决方案 > 我应该使用哪个函数代替 codeignitor 中的 redirect()?

问题描述

我希望用户不要通过 URL 跳转到我的欢迎页面。我在构造函数中添加了会话用户数据,但重定向不起作用,显示“ERR_TOO_MANY_REDIRECTS”..​​所以我也使用 header() 和 site_url 和 base_url 但这些都不起作用......

        class Admin extends MY_Controller
        {
        public function __construct()
        {
        parent::__construct();

            if (!$this->session->userdata('userId')) 
            return redirect('admin/index');
        }

            public function index()
            {


                $this->form_validation->set_rules('username', 'Username', 'required|alpha');
                $this->form_validation->set_rules('pass', 'password', 'required|max_length[12]');
                $this->form_validation->set_error_delimiters("<div class='text-danger'>","</div>");
                if($this->form_validation->run())
                {
                    $user=$this->input->post('username');
                    $pass=$this->input->post('pass');
                    $this->load->model('loginmodel');
                    $id=$this->loginmodel->isvalidate($user,$pass);
                    if($id)
                        {

                            $this->load->library('session');
                            $this->session->set_userdata('userId',$id);
                            return redirect('admin/welcome');

                        }
                    else
                        {
                            $this->session->set_flashdata('loginFailed','Invalid Username/password');
                            return redirect('admin/login');
                        }
                }
                else
                {
                    $this->load->view('admin/login');
                }
            }

        }

        ?>

标签: phpcodeignitercodeigniter-3codeigniter-2

解决方案


构造函数允许您在创建对象时初始化对象的属性。如果你创建了一个 __construct() 函数,当你从一个类创建一个对象时,PHP 会自动调用这个函数。(来源

在您的代码中,管理员重定向到管理员(当管理员初始化时,__construct()运行会导致再次重定向到管理员。)

我的建议:从索引方法检查会话

public function index(){
    if(!$this->session->userdata('userId')){
       //code
    }else{
       $this->load->view('admin/login');
    }
}

编辑:感谢 TimBrownlaw

您可以重定向到另一个控制器。

redirect('accounts/admin_login');
class Accounts extends MY_Controller {
    public function admin_login(){
        if($this->session->userdata('userId')){
             redirect('admin/index');
        }else{
            $this->load->view('admin/login');
         }
    }
}

推荐阅读