2012-04-07 8 views
1

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

} 
?> 
+0

OOPのページの一番上にあるセッションのセキュリティチェックを実行しても機能しないように見えますが、必要に応じてこれらのクラスを呼び出すことをお勧めします。 www.mysite.com/Main_controller/function1/に行くとfunction1がロードされることがわかります。 – jeremy

答えて

4

ベースコントローラを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 
    } 
} 

にログインしている場合を除き

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を拡張詳細はこちらをご覧ください: http://codeigniter.com/user_guide/general/core_classes.html

+0

MY_Controller.phpはapplication/librariesフォルダには入っていませんが、application/coreフォルダには入っています – Bram

0

ネイティブsession library in Codeigniterがあります。ここ

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

0

私の意見では、上記の解決策は簡単なログイン検証に役立ちます。ログインしているユーザのタイプやその他のケースに基づいてページを制御したい場合はどうなりますか。私の経験からベースクラスを拡張することは常に課題であり、基底クラスは一般的な&クロスカットの関心事に使用されるべきです。

public function function1() 
{ 
    if(SessionManager::CheckRights("IsMember")) 
    { 
     //$this->load->model(my_model); 
     // run some code 
    } 
    else 
     ...... 
} 
関連する問題