2013-05-17 14 views
5

ユーザーがログインしているかどうかを確認する最も安全な方法は何ですか?私はPHPのフレームワーク、codeigniterを使用しています。ユーザーがログインしているかどうかをチェック

$loggedIn = $this->session->userdata('is_logged_in'); // returns 1 
if($loggedIn == true): ?> 
    // do something 
<?php endif; ?> 

このコードがコントローラ内にあるかビュー内にあるかどうかは重要ですか?

答えて

0

コードがコントローラに配置される方が適切なので、ユーザーがログインしているかどうかに基づいて適切な表示を表示できます。安全ですか?何を避けようとしていますか? CIを使用すると、is_logged_in変数を適切に設定する限り、ユーザーが現在ログインしているかどうかを確認して確認する最も一般的な方法です。

1

コントローラが_constructの場合、コントローラがログインしたかどうかを調べることができます。そうでない場合は、ログイン画面に送信してください。

function __construct() { 
    parent::__construct(); 
    if (!$this->session->userdata('logged_in')) { 
      redirect('YourLoginController'); 
    } 
} 

これは間違いなくコントローラにあるはずです。

また、標準のコントローラを作成してCI_Controllerを拡張し、MY_Controllerのコンセプトをドキュメントで調べることもできます。そこでは、認証のためにチェックしていない場合はリダイレクトメソッドを追加することができ、その後、認証を必要とする、あなたのコントローラの方法でそれを呼び出す:使用

class Some_Controller extends MY_Controller { 
    function _construct() { 
     parent::_construct(); 
    } 

    // If a method requires authentication 
    function someMethod() { 
     $this->authenticated(); //This does nothing if logged in 
           //It redirects to login if not logged in 
     //Your stuff. 
    } 

    //If a method DOESN'T require login, your $this->data to 
    //pass to the view has already been started from MY_Controller 
    //so append the display content you need to that array and 
    //then pass it to the view 
    function someOtherMethod() { 
     $this->data['somecontent'] = "I'm content"; 
     $this->load->view('someView',$this->data); 
    } 
} 

:YOURコントローラで

class MY_Controller extends Controller{ 
    public $data = array(); 
    function _construct() { 
     parent::_construct(); 
     $data['logged_in'] = $this->session->userdata('logged_in'); 
    } 

    function authenticated() { 
     if (!$this->data['logged_in']) { 
      redirect('YourLoginController'); 
     } 
    } 
} 

そして、 someOtherMethod()から作成したコンセプトを使用すると、ビュー内の変数$logged_inを利用して、ユーザーの認証ステータスに基づいてコンテンツを変更できます。

2

プレゼンテーションロジック用のビューで、この場合はコントローラにコードを保存する必要がありますが、ビューと関連している場合(ナビゲーションがある場合など)、ログに別のメニューを表示する場合ユーザーには、あなたは、あなたのコントローラに

$loggedIn = $this->session->userdata('is_logged_in'); 
// .... 
$data['loggedIn'] = $loggedIn; 
$this->load->view('viewname', $data) 

を使用することができますし、コントローラからビューに変数を渡し、その後ビューで、あなたは

<?php if($loggedIn): ?> 
    // Show menu for logged in user 
<?php else: ?> 
    // Show a different menu 
<?php endif; ?> 

が府にforeachなどの一部だけloopsしてください確認することができますメニューを表示するか、またはビューに(必要な場合は)dropdown e.t.cおよびifステートメントを設定します。

0

コードはビューファイルとコントローラファイルの両方で動作しますが、MVCの考え方だけでなく、コントローラーにコードを保存する方が効率的です。

理由は、ビューファイルがコントローラから読み込まれるためです。つまり、ユーザーがログインしていない場合、コントローラ&のビューファイルは、必ずしも解釈する必要はありませんが、それでも解釈されます。コントローラーでセッションをチェックすると、コントローラーがセッションが欠落していることがわかると、残りのコードの解釈が停止され、認証を必要としないページにユーザーをリダイレクトするなどのその他の操作を実行できます。

関連する問題