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のWebページで、リダイレクトが多すぎます。

4

2 に答える 2

3

リダイレクトが多すぎる理由は、

$this->admin_login_check();

adminのコンストラクターコントローラー内。これは、コントローラー内の各メソッド/関数で常に実行されますadmin

adminまた、同じコントローラーにリダイレクトしたので、

redirect('admin/admin_login');

ログアウトしているかどうかを最初にチェックするため、何度もリダイレクトを試みます。1つの解決策は、実際に別のadmin_loginコントローラーでページを分離することです。homeあなたがそれを持っているなら多分コントローラー。

于 2012-12-27T14:19:35.200 に答える
0

次のように、現在のメソッド名を1回チェックできます。

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ページ以外のページにアクセスしていて、ログインしていないかどうかを確認します。

しかし、このリダイレクト方法は少し間違っていると思います。1つの関数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 に答える