CakePHPでログイン後にセッションが切れてしまう件について
CakePHPで開発をしていたところ、正しくログインしているのにすぐにセッションが切れ、
ログインできなくなってしまう問題がありました。
原因や解決策などを個人的にメモ。
起こった事象
ログイン後にセッションが切れてしまう事があった。
解決策
- Google chrome frameを使わない
- CakePHPのSession.checkAgentをfalseに設定する(参考:CakePHP の Session.checkAgent - エンジニアきまぐれTips)
- Google chrome frameで初めて読み込んだ場合リロードするような処理を追加する
原因
- ログインページでGoogle chrome frameが有効になっていた。
- CakePHPが異なるユーザーエージェントから同一のセッションIDでのアクセスを許可しない設定になっていた。
動作として
- ブラウザがログインページをリクエスト(ユーザエージェント:IE)
- サーバがログインページをレスポンス(Cakeがユーザエージェント(IE)とセッションIDを紐付ける)
- ブラウザがログインページを表示(HTMLにChrome frameで表示してねって書かれてるのでchrome frameで表示。この時にユーザエージェントもchrome frameのものに切り替わる)
- ブラウザがログインをリクエスト(ユーザエージェント:chrome frame)
- サーバ側はセッションIDと紐付かないユーザエージェントからアクセスがあったらセッションを破棄するようにCakeにデフォルトで設定されているのでセッション破棄→ログインできない
という事みたい。
なので、解決策のようにそもそもchrome frameを使わないようにするか、
Cakeの設定を変えるか、リロードさせてログイン時のユーザエージェントを正しく認識させればOK。