2012-03-03 20 views
0

ユーザのログイン時または登録時に、$_SESSION['username']はユーザ名の値を取得します。彼らが登録した場合にのみ、特定のコントローラにアクセスできるようにしたい。私はunloggined人々が見たいと思っていないすべてのコントローラでユーザがCodeIgniterにログインしているかしていないか

function __construct() 
{ 
    session_start(); 
    if(empty($_SESSION['username'])) 
    die(); 

    parent::__construct(); 
} 

:しかし、私はこれを書いての考えを好きではありません。それを行うためのより良い方法はありますか?ありがとう。

答えて

4

あなたはrequire_login機能を提供するために、(the Codeigniter Wiki Article on extending the classを参照してください)ベースのコントローラクラスを拡張検討するかもしれない:

class MY_Controller extends CI_Controller { 

    protected function require_login() { 
    if(empty($_SESSION['username'])) 
     die(); 
    } 
    } 

あなたがこれをしたら、あなたはあなたが保護したい各コントローラのコンストラクタでrequire_login()呼び出すことができます。

function __construct() { 
    $this->require_login(); 
} 

最後に、代わりにセッションストレージのためのPHPの$_SESSIONスーパーグローバルを使用して、あなたはCodeIgniterのを利用して検討するかもしれないsessionライブラリーまたはan equivalent

+0

クール、私はこの解決が気に入っています。 –

+0

'parent :: __ construct()'を呼び出すことを忘れないでください。 – hakre

+0

@hakreありがとう、よろしく! – rjz

1

codeigniterにはown session, not $_SESSIONがあります。

これ以外にも、同じタイプのコントローラーがある場合は、ベースコントローラーを作成してそこから拡張することができます。ベースコントローラーには、コントローラーがアクセス可能で、作成する各コントローラークラスにそのコントローラーを書き込む必要がないかどうかを検証するコードが含まれている可能性があります。 How do I extend the code igniter controller class?を参照してください。

+0

'CodeIgniterのは、それが$ _SESSION.'、自身のセッションではありません持っている - そして、人々ので、彼らはそのクッキーを作り、私は、セッションを必要としますCookieを使用してユーザー名を変更し、任意のアカウントにログインできます。 –

+0

それはちょうど言っていた。時には質問がここに現れ、尋ねられた人はそれを知らなかった。これはPHPであるので、あなたは$ _SESSIONを使うことができます。同じことが['extend'](http://de.php.net/manual/en/keyword.extends.php)にも当てはまります。 – hakre

+0

Codeigniterの 'session'ライブラリにネイティブセッションを使用する理由がいくつかありますが、@ hakreの右端のCIは理由で書かれています。素敵なネイティブセッションラッパーのためにhttp://codeigniter.com/wiki/Native_sessionをチェックしてください。 – rjz

1

関数__construct() {

parent::Controller(); 
$this->authenticate(); 

}

function authenticate() 
{ 
    if (!$this->session->userdata('admin_loggedIn')) 
    { 
    redirect('login'); 
    } 
} 
関連する問題