5

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

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

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

4

4 に答える 4

1

コントローラーを_construct使用すると、最初からログインしているかどうかを確認できます。そうでない場合は、ログイン画面に送信します。

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

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

通常の を拡張するベースコントローラーを作成し、ドキュメントでコンセプトをCI_Controller調べることもできます。MY_Controllerそこに、認証をチェックし、そうでない場合はリダイレクトするメソッドを追加し、認証を必要とするコントローラーメソッドでそれを呼び出すことができます。

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');
        }
    }
}

そして、あなたのコントローラーで:

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);
    }
}

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

于 2013-05-17T01:38:15.127 に答える
0

コードはビュー ファイルとコントローラー ファイルの両方で機能しますが、MVC の理念のためだけでなく、コードをコントローラーに保持することをお勧めします。また、コードをコントローラーに保持する方が効率的です。

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

于 2013-05-17T03:05:52.600 に答える
0

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

于 2013-05-17T01:36:50.377 に答える