1

CodeIgniter を使用して isset() 関数を使用して Cookie が存在するかどうかを確認し、それに応じて他のコントローラーにリダイレクトします。今私の問題は、check_logged_in 関数が Cookie が存在しないと考えているため、リダイレクト ループが発生することです。

これが私のコードです:

この関数は にありlogin_helperます。

function check_logged_in()  
{  
    if(!isset($_COOKIE['uid']))  
    {   
        redirect('users/login');  
        return FALSE;   
    }
    else
    { 
         return TRUE;
}

この次の関数はhomeコントローラにあり、前述の check_logged_in() 関数を呼び出します。

public function index()
{
    $this->load->helper('url');
    $this->load->helper('login');
    $logged_in = check_logged_in();

    if($logged_in === TRUE)
    {
        $this->load->view('templates/header');
        $this->load->view('pages/home_view');
        $this->load->view('pages/advanced_search_view');
        $this->load->view('pages/contact_information_view');
        $this->load->view('templates/footer');
    }
}

次の関数はusersコントローラにあります

public function login()
{
    if(isset($_COOKIE['uid']))
    { 
        redirect(home); 
    }
    else
    {
        -some unrelated code-
    }

Cookieが存在し、home/index関数または関数のいずれかを実行するとusers/login、リダイレクトループに陥ります。Cookie が存在しない場合、ログイン ページが表示されるため、users/loginCookie チェックは正しく機能しているように見えますが、home/index機能していません。


入れてみました

if(!isset($_COOKIE['uid']))  
{   
    redirect('users/login');     
}

関数に直接入れましたhome/indexが、同じ問題が発生しました。

4

1 に答える 1

0

ログインチェックをコンストラクタに入れます。一般的な名前を付けて、Cookie やデータベース ルックアップから情報を返すなどの便利な処理を行います。

function __construct() {
parent::__construct();
 // load the model
 $this->load->model( 'login_model' );

 // if logged in, return $this->user
 if(! $this->user = $this->login_model->verifyUser() ) 
 { redirect('users/login', 'refresh'); }

 } // construct

これで $this->user がビューに至るまでメソッドに利用できるようになりました。

同じように、ユーザーよりも多くのことができる「管理者」が必要な場合

 $this->admin = $this->login_model->verifyAdmin() ;

次に、verifyAdmin() で何が起こるかを変更できます。クラスを更新する必要はありません。

于 2012-12-11T19:15:01.053 に答える