2012-02-19 6 views
4

指定したすべてのコントローラでログインをチェックするクラスが必要です。 CodeIgniterのバージョンは2.1.0であり、私はPHP 5.3.10Codeigniterはコアクラスを拡張します

ハイアーは、私はそれを設定する方法をである: 私はhttp://ellislab.com/codeigniter/user_guide/general/core_classes.html を見て、私はこのようにそれを設定:/アプリケーション/コア/ MY_Mainで を私は

welcome.php持って私のコントローラで

class MY_Main extends CI_Controller { 

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

の.php私はMY-メインにログインチェックを置くのであれば、それは仕事を取得する必要がありますが、私はそれが誰も仕事を得るカント?

+0

あなたはユーザーデータを保存し、セッションを確認するためにCodeIgniterのセッションを使用する必要がありますユーザーがログインしているかどうかを毎回確認します。 –

+0

これはうまくいくはずです、私は私のADMIN_Conrollerでまったく同じことをします。 – Jens

+0

あなたはあなたのコードの例を挙げることができます...ちょうど上記のように...あなたはCIの同じバージョンを持っていますか? – Dakadaka

答えて

2

あなたはロジックが正しい、それは動作するはずです。それはまさに私のすべてのコード署名サイトでやっていることです。私のコードは私のログインチェックがライブラリから呼び出されているのでもう少し複雑です($CI =& get_instance();を呼び出してから$CI$thisの代わりに呼び出す必要があります)が、以下のようなものが役に立ちます。 logged_inは、セッション・データ・セットの項目ときにユーザーがログイン中に与えられただけの名前です。(HTTP 500)上記のあなたのコメントに関しては

class MY_Main extends CI_Controller { 

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

     $session_data = $this->session->all_userdata(); 

     if(!isset($session_data['logged_in'])) 
      redirect('/login'); 
    } 
} 

、そこに何が起こっているのか本当にわかりません。あなたが貼り付けたコードは、そのようなエラーを投げてはならないはずです。ロギング機能で構築されたcodeignitersをオンにしてみてください。

http://codeigniter.com/user_guide/general/errors.html

4

私はCIのマニュアルに記載されているよう取り組んコアクラスのextensonを持って前に私は/application/config/config.phpするために、次のコードを追加する必要がありました。ここhttp://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

function __autoload($class) 
{ 
    if(strpos($class, 'CI_') !== 0) 
    { 
     @include_once(APPPATH . 'core/'. $class . EXT); 
    } 
} 
0

それはいくつかの時間があるため、データベース接続の起こるから取ら

コード。データベース場合

確認してください:

  1. が点灯エラーあなたのCPanelのエラーログから報告することによって、選択されています。
  2. ユーザーがあなたのデータベースに追加されました。
1

ライブラリクラスを作成してライブラリフォルダ内に配置し、auto_loadまたはコントローラ内にロードする必要があります。 は、例えば、あなたのライブラリ内の関数を作成します。

/** 
    * 
    * @return boolean check if a user is logged in or not 
    */ 
    function notLogin() 
    { 
     if (!$this->is_logged_in()){ 
      //echo "pelase <a href='login'><b>login</b></a> to continue "; 
      redirect('home/login','refresh'); exit; 
     } 
     return true; 
    } 

とあなたのコントローラのコンストラクタか、このようにしたい任意の関数内で呼び出す:

class Main extends CI_Controller 
{ 
    private $POST = array(); 
    private $ci_form; 

    function __construct() 
    { 
     parent::__construct(); 
     //check if user is logged in or not 
     $this->m_auth->notLogin(); 
     $this->load->library('form_validation'); 
     $this->load->library('ajax_pagination'); 
    } 
} 
関連する問題