CakePHP で use_trans_id を有効にする

概要

一部の携帯電話では、Cookie が使えない。そのため、携帯サイトの開発では、セッションID をリクエスト URL の一部に含める方法が取られることが多い。PHP では設定ファイルに use_trans_id というフラグがあり、これを有効にすることにより、PHP 側で自動的にこの処理をやってくれる。なんと。やるな PHP

ただ、CakePHP でこれを行う場合、多少注意すべき点がある。

次のサイトを参考にして本エントリを書いた。

CakePHPで携帯サイトを作る

前提は PHP 5.2 + CakePHP 1.2。

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 の機能が使えるようになると思う。ただ、詳細な点でまだいろいろ問題があるかもしれない。その点について、おいおい補足していくつもりだ。