あなたがする必要があるのは、セッションを管理し、ログインしたコントローラーをログアウトしたコントローラーから継承によって分割する基本コントローラーをセットアップすることです。
Phil Sturgeon のKeeping It Dryに関する投稿をご覧になることをお勧めします。Phil は彼の投稿で、毎回チェックする必要がないように、親コントローラーがセッションを監視するようにコントローラーを実装する方法の基本を説明しています。
例として:
マイコントローラー:
class MY_Controller extends CI_Controller{
function __construct(){
parent::__construct();
//do things in here that ALL controllers should do.
}
}
MY_In_Controller:
class MY_In_Controller extends MY_Controller{
function __construct(){
parent::__construct();
//if user doesnt have the session redirect them out NOW!
}
}
MY_Out_Controller:
class MY_Out_Controller extends MY_Controller{
function __construct(){
parent::__construct();
//if the user has the session, redirect them in NOW.
}
}
ログイン コントローラ:
class Login extends MY_Out_Controller{
function __construct(){
parent::__construct();
}
function index(){
//folks that have a session (already logged in) will never even get here.
//because the parent class MY_Out_Controller already redirected them back in.
}
}
コントローラーの管理:
class Manage extends MY_In_Controller{
function __construct(){
parent::__construct();
}
function index(){
//folks that don't a session (logged out) will never even get here.
//because the parent class MY_In_Controller already redirected them out.
}
}
つまり、セッション チェックをコントローラに直接記述しないでください。頻繁に書きすぎて、DRY 原則に違反することになります。
更新: CodeIgniter の Base Classes Revisitedで Shane Pearson のメソッドを使用して、Phil のメソッドを改良することをお勧めします。