CodeIgniterの学習 24 - Db_session利用時に$this->db_session-> と $this->session-> のどちらでも呼べるようにする

(08/11/10追記)
http://d.hatena.ne.jp/dix3/20081110/1226243974 にまとめました。




ええと、今更ながら、以前のエントリ
セッションをDBに保持するようにする (暫定版)1(http://d.hatena.ne.jp/dix3/20080921/1221946495
の補足。

freakauthのログイン認証やらでは、$this->db_session 利用が前提だったので、
ウチのサンプルも $this->db_sessionの使用を前提に書いていたのだが、

他のサンプル等で db_sessionを使っていない場合でも、
$this->session を $this->db_session にわざわざ書き換えずに動かしたくなったので、ちょっとズルをした。


ソース差分

db_sessionとsessionを使い分けしてなければ問題ないはず。
コンストラクタで、強制的に$this->CI->sessionを作っている。
application/libraries/Db_session.php
編集前:コンストラクタ部分

<?php
//上略
    /**
     * Session Constructor
     *
     * The constructor runs the session routines automatically
     * whenever the class is instantiated.
     */
    function Db_session()
    {
        $this->CI =& get_instance();
        log_message('debug', "Session Class Initialized");
        $this->sess_run();
    }
//下略
 ?>

編集後:コンストラクタ部分

<?php
//上略
    /**
     * Session Constructor
     *
     * The constructor runs the session routines automatically
     * whenever the class is instantiated.
     */
    function Db_session()
    {
        $this->CI =& get_instance();
        //$this->sessionでも呼べるようにする。
        //db_sessionとsessionを使い分けしてなければ問題ないはず
        $this->CI->session =& $this;
        log_message('debug', "Session Class Initialized");
        $this->sess_run();
    }
//下略
 ?>


てなかんじ、これで、$this->db_session と $this->session が同義となった。
逆($this->sessionを使っている環境で$this->db_sessionを同義として扱う事)も同様に出来ると思う。


いざとなれば、

cd "(applicationのディレクトリ)" ;
for i in `find ./ -name "*.php"` ; do echo $i;  sed -i 's/db_session/session/g' $i; done;

みたいにsedで一括置換してしまえばいいし。今は気にしないで先に進むことにする。


ウチは取りあえず、今後のエントリのサンプルソースでもこのまま $this->db_sessionを使うことにする。