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を使うことにする。