【CakePHP】同一ドメイン上で複数のアプリの認証をすると、他方の認証情報が上書きされる【AuthComponent】

ご無沙汰でございます…毛根はさらに弱りましたが、かろうじて生きています(´д`)色々ありまして、そっとしておいて欲しいのに無理難題が雨あられのように降ってくるわけで(^_^;

・・・そういうのは良いとしてw

CakePHP AuthComponent のお話です(と言うかSessionComponentに起因します)。

同一の開発サーバ上で、突貫工事で複数のサービスを開発させられてしてて気づく(感謝の心)

同一の開発サーバ(ドメイン)上で、複数のサービスを開発してるとハマるポイントがありました。

※複数サービスを同時進行でデバッグする追い込まれたシチュエーションがいままでなかったので気にしてなかったのですが、そういえば時々謎のセッション切れをしていることがあったなあ(遠い目)的な感じでした。

2つ以上のアプリを同時開発中で、片方でログインすると、片方の認証情報を保持できない

アプリAでログインすると、ログインしていたハズのアプリBで再度ログインを求められる。ディレクトリ切ってるし、そもそも全く関係ない管理をしているのに認証情報が共有(上書き)されてしまう?

原因と対策

Firebug でCookieを調査。ログインした直後の状態です。 testserverというドメイン上で開発しています。

2016-04-08_18h02_43

これや!( ´▽`)

アプリAでログインする→A用のセッション判定用cookie[CAKEPHP]をペロリ。
その後、アプリBでログイン→B用のCookieをペロリ。
だがしかし、同じ名前のCookie[CAKEPHP]は上書きされてしまいますw。

結果として元のアプリのセッションが判別できなくなりログアウトさせられている、と言うことですねーカッチョ悪いですねー。恥ずかしいですねー。

そんなこんなで、原因判明、対策など

core.php では、Security.cipherSeed やSecurity.salt はそれぞれで書き換えろ~と書いてありますが、今回のCookie名については、指定しないと警告が出るとかはなく、明示的に指定する項目はないため、デフォルトでは”CAKEPHP”という名前になります。

core.php より。Defaults to ‘CAKEPHP’ と書かれています。

2016-04-08_18h36_32

同じドメインのサーバ上でSession.Cookie名を指定していない複 数のCakeアプリがあった場合、ドメイ ンCookieがすべて[CAKEPHP]同一となるため、今回の様な症状が発生します(´д`)

core.php の末尾にでも、
//セッションキー変更
Configure::write( ‘Session.cookie’, ‘KEYS_TO_APP’);

と、付加しとけばSESSION判定用のCookie名が変更されます。あるいは上記スクショのところのarrayにぶち込んでも大丈夫です。

今後作るサービスは、常に別のキーで書き換えておくようにしましょう。Cake使ってるのバレバレになってるw

コメントを残す

メールアドレスが公開されることはありません。