ひとつのサイトの中にSSLページと非SSLページを混ぜる場合は注意が必要です。
http://book.cakephp.org/2.0/ja/development/sessions.html
に書かれてあるように、session.cookie_secureをfalseにしないとcookieが継続できません。
1 2 3 4 5 6 |
Configure::write('Session', array( 'defaults' => 'php', 'ini' => array( 'session.cookie_secure' => false ) )); |
SSLページから他のページに飛ぶときに、相対リンクだとやはりSSLのかかったページにとびます。暗号化通信を解除しようと思うとhttp://から始まる絶対リンクで書かないといけません。
これを相対リンクのままにして強制的にhttpかhttpsに振り分けるようにしたやり方も書いときます。
config/route.phpでsslディレクトリ以下へのアクセスはpssl/を省いたコントローラ・アクションにアクセスし、パラメータsslを入れるよう設定。
1 2 3 4 5 6 7 |
// SSL Router::connect( '/ssl/:controller/:action/*', array( 'ssl' => true, ) ); |
AppControllerでアクセスのたびに環境変数のHTTPSとパラメータsslを比べてリダイレクトし直しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function beforeFilter() { if (env('HTTPS')){ if (!isset($this->request->params['ssl'])){ $this->redirect( 'http://'.Configure::read('site_domain').$this->here.(count($_GET) ? '?'.http_build_query($_GET) : '') ); } } else { if (isset($this->request->params['ssl'])){ $this->redirect( 'https://'.Configure::read('site_domain').$this->here.(count($_GET) ? '?'.http_build_query($_GET) : '') ); } } } |