Posted on

CakePHPでSSL認証とそうでない時の処理を振り分ける

ログインするときにSSL通信でログインするか普通の通信でログインするかを選べるようにして欲しいというお客さんの要望があったので今回はこんな感じのプログラムで対応しました。

やっている内容はログイン時にSSL通信でログインした時、Cake内の移動の際にSSL通信の場合はhttpsで移動するようにするという感じです。


ログインするときにSSL通信でログインするか普通の通信でログインするかを選べるようにして欲しいというお客さんの要望があったので今回はこんな感じのプログラムで対応しました。

やっている内容はログイン時にSSL通信でログインした時、Cake内の移動の際にSSL通信の場合はhttpsで移動するようにするという感じです。

ログインのときに

  1. //ログイン  
  2. if (isset($this->params['form']['login'])) {  
  3. //SSL通信でやり取りしない  
  4. $this->Session->del('ssl');  
  5. }  
  6. //SSLでログイン  
  7. if (isset($this->params['form']['ssl_login'])) {  
  8. //SSL通信でやり取りする  
  9. $this->Session->write('ssl', true);  
  10. }  

という感じでSSLかどうかをセッションにもっておきます。

beforeFilterでセッションの状態がSSL通信でURLがhttps://で始まらない場合はhttpsにリダイレクトをするという処理を入れるとSSL通信と普通の時の通信が切り替えられました。

  1. function beforeFilter() {  
  2. //SSL通信かどうか切り替える  
  3. if ($this->Session->check('ssl')){  
  4. if(emptyempty($_SERVER['HTTPS'])){  
  5. $this->redirect( 'https://' . $_SERVER['HTTP_HOST'] . $this->here );  
  6. exit;  
  7. }  
  8. }  
  9. }