【问题标题】:which function should i use in place of redirect() in codeignitor?我应该使用哪个函数代替 codeigniter 中的 redirect()?
【发布时间】:2020-07-29 20:11:09
【问题描述】:

我希望用户不要通过 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');
                }
            }

        }

        ?>

【问题讨论】:

  • 显然您正在不断地重定向到同一页面或来回重定向。例如重定向到管理员/欢迎和管理员欢迎将您重定向回管理员/登录。或者 admin/login 将您重定向到 admin/login 等。 1. 尝试注释掉重定向然后检查会发生什么。 2. 在重定向之前到处调试,这样你就可以看到发生了什么。 3. 将重定向的注释一一取消,看看bug在哪里。

标签: php codeigniter codeigniter-3 codeigniter-2


【解决方案1】:

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

在您的代码中,管理员重定向到管理员(当管理员初始化时,__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');
         }
    }
}

【讨论】:

  • 看到您正确地重定向到另一个方法,这将防止 OP 陷入无限循环的问题,该测试可以留在构造函数中,这将“保护”所有管理方法。将其放在 index 方法中只会保护对 index 方法的访问。
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2015-01-19
相关资源
最近更新 更多