1

この質問は、関数/OOP/MVC ベースの環境でセッション セキュリティを正しく実装する方法に関するものです。

私はプロシージャル ファイルのセッション セキュリティに精通しています。プロシージャルに記述された control_panel.php ファイルがある場合は、ページの上部で、またはロジックが最初にロードされることを指示するたびに、セッション セキュリティを簡単に確認できます。

ただし、私は OOP/MVC を初めて使用し、私のページは関数の集まりにすぎません!

すべての関数でセッションのセキュリティをチェックする必要がないことを願っています..?

CodeIgniter2 を使用していることに注意してください。

これが私のコードの例です:

<?php

class Main_controller extends CI_Controller {

public function __construct() {
        parent::__construct(); 
}

public function index() {
   //$this->load->view(my_view);
   //run some code
}

public function function1() {
   //$this->load->model(my_model);
   // run some code
}

private function function2() {
   //$this->load->view(my_view2);
   //run some code
}
?>

手続き型の php ページでは、次のようになります。

<?php

// check user login
if (isset($_SESSION["user"]) && !empty($_SESSION["user"])) {

// all of the code on the page

}
?>
4

3 に答える 3

5

ベースコントローラーを - として拡張し、MY_Controllerそこにチェックを入れます。

class MY_Controller extends CI_Controller
{
    public function __construct() 
    {
        parent::__construct();

        if ( ! isset($_SESSION["user"]) OR (empty($_SESSION["user"]))
        {
            // User not logged in - so send them to the home page
            redirect ("/");
        }
    }
}

MY_Controller次に、「安全」にしたいコントローラーごとに拡張します。ユーザーは、ログインしていない限り、コントローラーのいずれにもアクセスできません。

class Main_controller extends MY_Controller
{
    public function __construct() 
    {
        parent::__construct(); 
    }

    public function index()
    {
        //$this->load->view(my_view);
        //run some code
    }

    public function function1()
    {
        //$this->load->model(my_model);
        // run some code
    }
}

詳細については、こちらを参照してください: http://codeigniter.com/user_guide/general/core_classes.html

于 2012-04-10T14:05:13.273 に答える
0

私の意見では、上記のソリューションは単純なログイン検証に機能します。ログインしているユーザーのタイプやその他のケースに基づいてページを制御したい場合はどうなりますか。私の経験から、基本クラスを拡張することは常に課題であり、基本クラスは一般的で横断的な懸念に使用する必要があります。検証のニーズを処理する別のクラスを実装し、必要に応じてこれらのクラスを呼び出すことをお勧めします。

public function function1()
{
    if(SessionManager::CheckRights("IsMember"))
    {
        //$this->load->model(my_model);
        // run some code
    }
    else
        ......
 }
于 2013-01-08T15:02:20.197 に答える
0

Codeigniter にはネイティブセッション ライブラリがあります。また、いくつかの拡張ライブラリ。CI コミュニティを検索すると、多くの種類と例があります。セッション ライブラリのオートロード フォームconfig/autoload.phpを作成し、メイン コントローラー内でセッションの検証を確認します。

于 2012-04-07T20:01:33.337 に答える