CodeIgniterのセッション有効期限でつまづく

CodeIgniterのセッションが気に入らないという話を先日書いたばかりだが、しばらく放置して戻ってきたらまたつまづいてしまった。

ユーザーをログインさせるときに「次回以降パスワードを省略」できるよう、セッションの有効期限を設定しようとしたのだが…。

これまで扱ってきたPHPでの開発では、PHPネイティブのセッション関連設定項目にて有効期限を0にしておけば、ブラウザを閉じたときにセッションが切れてくれていた。有効期限を延ばしてクッキーを設定しなおせば長いライフタイムのセッションができて、それがパスワード保存、つまりログイン状態の維持ということになっていた。

CIではネイティブの関数を使用せずオリジナルのセッション管理クラスを利用している。これにももちろん有効期限の設定項目はあるのだが、0にした場合、閉じるまでではなく無期限ということになってしまう。つまりブラウザを閉じてもいつまでもログイン状態が保持されることになる。

有効期限のデフォルトは2時間になっており、2時間の間であればいったんブラウザを閉じて開きなおしても以前のセッションに復帰する。ためしに有効期限を1秒などの短い値にしてみたが、そうするとブラウザを閉じなくても有効期限切れとして扱われ、次々と新しいセッションが生成されてしまった。

デフォルトの2時間など、一回の利用の時間として想定できるほどほどの値にしておくという手もあるが、よくないだろう。なぜなら一回の利用の間でも2時間を越えればセッションが初期化されてしまうからだ。さらに、2時間を越えなかったとしてもブラウザを閉じただけでは消えず、共有のコンピュータであれば危険。要するに、一回ブラウザを開いて閉じるまでというセッション期限をどうしても使いたいわけだ。

さぁどうやって解決しようか。
できるかぎりCIのコードを残したまま、言い換えれば、自分でコードを書かずに解決したいものだが。

Categories: HowTo's, Tips and Tricks |Tagged , , , | Trackback URL |