CakePHPでログイン後にセッションが切れてしまう件について

CakePHPで開発をしていたところ、正しくログインしているのにすぐにセッションが切れ、
ログインできなくなってしまう問題がありました。
原因や解決策などを個人的にメモ。

起こった事象

ログイン後にセッションが切れてしまう事があった。

解決策

  1. Google chrome frameを使わない
  2. CakePHPのSession.checkAgentをfalseに設定する(参考:CakePHP の Session.checkAgent - エンジニアきまぐれTips)
  3. Google chrome frameで初めて読み込んだ場合リロードするような処理を追加する

原因

  1. ログインページでGoogle chrome frameが有効になっていた。
  2. CakePHPが異なるユーザーエージェントから同一のセッションIDでのアクセスを許可しない設定になっていた。

動作として

  • ブラウザがログインページをリクエスト(ユーザエージェント:IE)
  • サーバがログインページをレスポンス(Cakeがユーザエージェント(IE)とセッションIDを紐付ける)
  • ブラウザがログインページを表示(HTMLにChrome frameで表示してねって書かれてるのでchrome frameで表示。この時にユーザエージェントもchrome frameのものに切り替わる)
  • ブラウザがログインをリクエスト(ユーザエージェント:chrome frame)
  • サーバ側はセッションIDと紐付かないユーザエージェントからアクセスがあったらセッションを破棄するようにCakeにデフォルトで設定されているのでセッション破棄→ログインできない


という事みたい。
なので、解決策のようにそもそもchrome frameを使わないようにするか、
Cakeの設定を変えるか、リロードさせてログイン時のユーザエージェントを正しく認識させればOK。