JSONPでやりとりするウェブアプリをCakePHPで作っていた。
任意のウェブページに埋め込めるタイプのもので、サービスに対してセッションを維持する仕様(POST用の使い捨てkeyを保持する)。

しかし、何かサービスにアクセスするたびに、セッションが破棄・生成されているようだ。

Security.levelがhighに設定されていると、セッション「ID」は毎回生成されるのがCakePHPの仕様。

 * CakePHP session IDs are also regenerated between requests if
 * 'Security.level' is set to 'high'.

だけどセッション自体は維持されるはず。。。
結局フレームワークのソースを読むことに。

highとmediumの場合、セッションが有効かどうか判断するのにreferrerも勘案されるらしい。
んで、クロスドメインなJSONPなウェブアプリだったため、referrerがinvalidになって毎回破棄、ということのようだ。

結局、lowを採用、Session.timeoutを小さくして調整することにした。

■cake/libs/session.php
    function __initSession() {
        switch($this->security) {
            case 'high':
                $this->cookieLifeTime = 0;
                if (function_exists('ini_set')) {
                    ini_set('session.referer_check', $this->host);
                }
            break;
            case 'medium':
                $this->cookieLifeTime = 7 * 86400;
                if (function_exists('ini_set')) {
                    ini_set('session.referer_check', $this->host);
                }
            break;
            case 'low':
            default:
                $this->cookieLifeTime = 788940000;
            break;


php:5.1.6
CakePHP:1.2.0.7296-rc2