CakePHP で use_trans_id を有効にする
概要
一部の携帯電話では、Cookie が使えない。そのため、携帯サイトの開発では、セッションID をリクエスト URL の一部に含める方法が取られることが多い。PHP では設定ファイルに use_trans_id というフラグがあり、これを有効にすることにより、PHP 側で自動的にこの処理をやってくれる。なんと。やるな PHP。
ただ、CakePHP でこれを行う場合、多少注意すべき点がある。
次のサイトを参考にして本エントリを書いた。
PHP の設定
CakePHP アプリのディレクトリに .htaccess があるはずだ。ここで use_trans_id を有効にし、cookie を無効にしてみる。
php_flag session.use_trans_sid On
php_flag session.use_cookies Off
CakePHP の設定
app/config/core を修正する。
セッションID の名前は、
Configure::write('Session.cookie', 'MY_APP_SESSION');
のように指定できる。
セキュリティ・レベルを中(medium)にしておかないと、セッションID がリクエストのたびに変わってしまい、やや不便である。
セキュリティ・レベルを medium にすると、セッションのタイムアウト時間が長くなりすぎる。
Configure::write('Session.timeout', '12');
セキュリティ・レベル medium では上の数字 x 100(秒)でタイムアウト時間が計算されるので、上の例では、1200秒 = 20分ということになる。
後はやや乱暴だが、cake/lib/session.php で
ini_set('session.use_trans_sid', 0);
を
ini_set('session.use_trans_sid', 1);
に変更してしまう。フレームワークのコードに手を入れるのは賛否両論があるだろうが、CakePHP は基本的にプロジェクトごとにフレームワークのソースコード全体をコピーしてしまうので、まあいいんじゃないかな。もっとスマートなやり方はあるんだろうけど。
とりあえず、これで CakePHP で use_trans_sid の機能が使えるようになると思う。ただ、詳細な点でまだいろいろ問題があるかもしれない。その点について、おいおい補足していくつもりだ。