CakePHPがセッション管理時にセットするCookieのパスを自由に設定
CakePHP 1.2RC3を利用してます
CakePHPは、セッション管理時に発行するCookieのパスをwebrootが設置してあるパスに自動セットします。
例えば、
/home/myname/public_html/cake/webroot
というディレクトリ構成でURLが
http://www.example.com/cake/xxxxx
というような場合、CakePHPで発行するCookieのパスは /cake という値がセットされます。
従って、
http://www.example.com/hoge/hoge.php
というような/cake以外のURLにはセッションが引き継げません。
前にこのことを下記の記事に書いたのですが、
SessionのAutoStartをOffにして、手動でセッション管理 (セッションコンポーネント編)
SessionのAutoStartをOffにして、手動でセッション管理
もっとスマートなやり方がありました。
config/core.phpにて
Configure::write('Session.start', false);
として、セッションを自動でスタートしないようにします(自動でスタートするとパスが指定できないので)
その代わりに下記のように、app/app_controller.phpのbeforeFilterにてすべてのアクションでセッションをスタートさせます。activateでパスを指定すると、そのパスをセットしたCookieを発行してセッション管理できます。
function beforeFilter(){ $this->Session->activate('/'); }
参考
http://www.topofcool.com/2008/05/how-to-set-the-session-path-for-cakephp-sessions/
追記
Session.startをtrueにしても、Cookieのパスをコントロール出来るという記事がありました。これが一番いいかも。
Session.startをfalseにするとSessionHelper->checkで常にfalseになる