CodeIgniterでセッション有効期限をうまく扱えない問題、ひとまず解決。
実は解決したかに見えて大きな問題が残ってるのだが、とりあえず書いておく。
Sessionクラスを拡張してsess_runとsess_writeを改造した。
とりあえず、設定ファイルでsess_expirationが0のときに無期限(実際には2年)となっていた部分を、本当の0に変更(sess_run())。
さらに、実際にクッキーを書き込むsess_writeにて、セッションクラスのメンバー$sess_length(ここに設定値が保持される)が0の場合はクッキーのライフタイムをtime+2年から0に変更。
こうすることで、設定ファイルで期限を0としたときはブラウザを閉じるまで有効、となった。ひとまずOK。
残る問題は、個別のセッションごとにタイムアウトを保持できていないこと。設定ファイルを毎回読んでしまうので、いったん「このセッションの期限は2週間」などと個別に設定しても、次のページ遷移でグローバルな設定ファイルの「0」が適用されてしまう。
つまりタイムアウトをセッション固有の値としてそれぞれ保存する必要がある。これはSessionクラスの更なる改造が必要だし、下手すればセッション情報を保存しているテーブルの構造にも影響するので、また後で手をつけることにする。