CodeIgniter: ユーザーが複数のページにログインしているかどうかを確認する 質問する

CodeIgniter: ユーザーが複数のページにログインしているかどうかを確認する 質問する

サイトのセクションにマップするコントローラーがあり、その中のすべてのページ (メソッド) は、ユーザーがログインしている場合にのみ表示されます。それ以外の場合は、ログイン画面にリダイレクトされる必要があります。

これを動作させるために、私は次の操作を実行しました:

function index() {

    if ($this->session->userdata('logged_in')) {
        $this->load->view('main');

    } else {
        redirect('/login');
    }
}

function archive() {

    if ($this->session->userdata('logged_in')) {

などなど...各メソッドでそのチェックを繰り返します。コントローラ内の複数またはすべてのメソッドに対してこのチェックを 1 回実行する最も簡単な方法は何ですか?

ベストアンサー1

メソッド内でコードを実行すると、コントローラーのすべてのメソッドでコードを実行できます__construct()

function __construct()
{
    parent::__construct();
    if ( ! $this->session->userdata('logged_in'))
    { 
        // Allow some methods?
        $allowed = array(
            'some_method_in_this_controller',
            'other_method_in_this_controller',
        );
        if ( ! in_array($this->router->fetch_method(), $allowed)
        {
            redirect('login');
        }
    }
}

全体へのアクセスを制限したい場合は、「許可された」ビットを削除できますが、ベース コントローラーを作成するなど、これを行うにはよりよい方法があります。

// Create file application/core/MY_Controller.php
class Auth_Controller extends CI_Controller {

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

次に、制限されたコントローラーAuth_Controllerを の代わりに拡張しますCI_Controller。これで、コントローラーがロードされるたびにコードが実行されるようになります。

コアクラスの拡張に関する詳細情報:http://www.codeigniter.com/user_guide/general/core_classes.html#コアクラスの拡張

興味深い点:http://php.net/manual/en/language.oop5.decon.php

おすすめ記事