0

我有以下功能:

public function admin_login_check()
{
    if($this->session->userdata('is_logged_in') == FALSE)
        redirect('admin/admin_login');
}

而这个(暂时):

public function index()
{
    $this->admin_login_check();
    $data['title'] = 'Početna | TOP';
    $data['main_content'] = 'admin_home';
    $data= $this->data + $data;
    $this->load->view('admin/admin_template', $data);

}

public function admin_login()
{
        $data['title'] = 'Prijava | TOP';
        $data['main_content'] = 'admin_login';
        $data= $this->data + $data;
        $this->load->view('admin/admin_template', $data);
}

当我$this->admin_login_check()__construct函数内部时,我收到以下错误:

xxx/admin/admin_login 的网页导致了过多的重定向。

4

2 回答 2

3

您有太多重定向的原因是因为当您放置

$this->admin_login_check();

在您admin的构造函数控制器中。这将始终在admin控制器内的每个方法/函数上运行。

而且由于您重定向到同一个admin控制器,

redirect('admin/admin_login');

它会首先检查您是否已注销,因此它会一次又一次地尝试重定向您。一种解决方案是在单独的控制器上实际分离您的admin_login页面。home如果你有,也许是控制器。

于 2012-12-27T14:19:35.200 回答
0

您可以对当前方法名称进行一次检查,如下所示:

public function admin_login_check()
{
    $loged_in = $this->session->userdata('is_logged_in') ? TRUE : FALSE;
    if($this->router->method != 'admin_login' && $loged_in==FALSE)
        redirect('admin/admin_login');
} 

IF 会检查您是否在除 admin_login 页面之外的任何页面并且您没有登录。

我如何认为这种重定向方法有点错误。如果你让一个函数 is_admin 返回 TRUE/FALSE 并做这样的事情会好很多......

public function __construct()
{
    parent::__construct();
    if($this->is_admin() == FALSE && $this->router->method != 'admin_login')
        redirect('admin/admin_login');
}

public function is_admin()
{
    return $this->session->userdata('is_logged_in') ? TRUE : FALSE;
} 
于 2012-12-27T14:31:25.597 回答