cakephperの日記(CakePHP, Laravel, PHP)


継続的WebセキュリティテストサービスVAddyを始めました!

2008-12-24

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になる




CakePHPがセッション管理時にセットするCookieのパスを自由に設定(サブドメイン編)

CakePHP 1.2RC3を利用してます

偶然に発見した記事なのですが、CookeでセットするパスにTOPレベルドメインをセットし、サブドメインを含む同一ドメイン間でセッションを引き回す場合の方法が下記の記事に書いてありました。

http://www.cake-toppings.com/2008/10/04/set-the-session-cookie-to-the-top-level-domain/


下記のようにすれば良いそうです。

app/config/bootstrap.php

ini_set('session.cookie_domain', '.domain.com'); 

app/config/core.php

Configure::write('Security.level', 'low');

今のところ使う用途がないのですが。。。メモ