CakePHP

CakePHPでブラウザを閉じたのにsession情報が残っている場合の対策

2013/05/08

WEBサイトを作成する際にお世話になるセッションですが、例えば、フォームに入力した内容をセッションに保存する場面があったとしても、ブラウザを閉じるととセッションはクリアされます。

これは、php.iniの session.cokkie_lifetime(ブラウザに送信するクッキーの有効期間を秒単位で指定する)が「0」で設定されているため、「ブラウザを閉じるまでセッションは有効とする」となっているからです。

しかしながらCakePHPでセッションを利用した場合、ブラウザを終了してもなぜかセッションがクリアされず、前述のフォーム内容が残ったままになっている場合があります。

何度ブラウザを終了しても残っているために「???」状態だったのですが、これはCakePHPの設定によるものと判明。

デバッグモードなどを指定する設定ファイル app/config/core.php の Security.level の値が high 以外を指定した場合、php.ini で session.cokkie_lifetime を「0」としてもCakePHPの Session クラスで session.cookie_lifetime が上書きされてしまうとこのと。
ちなみにこの Security.level ですが、デフォルトは medium(中)なので、セッションが消えない事態に陥ります。
なんて迷惑な (^^;)

ということで、単にブラウザを終了した時にセッション情報をクリアしたい、って場合は、Security.level を high に変更しましょう。
しかしながらこの Security.level ですが、highにした場合、セッション「ID」は毎回生成されるらしいです。
今回はPC向けのサイトだったので、事なきを得ましたが、携帯サイトを作成するときには要注意です。

[tgAmazonItemLookup asin="4839932468" related="1"]

-CakePHP
-, , , ,