1.1でのSSL通信

どうやるか?

app_controllerのbeforeFilterに記述

注意

$_SERVER['REQUEST_URI']を使うとリダイレクトしたときに
プロトコルが変更されていない(ようわからん)。
代わりに$_SERVER['HTTPS']を使うとうまくいく。

サンプルコード

#app_controller.phpに記述

class AppController extends Controller
{
  // SSL通信をするアクションの定義
  var $sslActions = array('action1', 'action2',
 'action3');

  function beforeFilter() {
    // データ(SSLフラグ)の読み込み
      $isSSL = IS_SSL;

    // SSL使用フラグが立っていればhttpsでリダイレクト
    if($isSSL) {
      if( array_search( $this->action, $this->sslActions
 ) !== false ) {
        // SSL通信定義されたアクションでhttpsがセットされ
てないなら、httpsでリダイレクト
        if( !isset($_SERVER['HTTPS']) ) {
          $this->redirect('https://'.$_SERVER['HTTP_HOST'] . 
$this->here);
          exit;
        }
      }
      else {
        // SSL通信が定義されていないが、httpsがセットされ
ているなら、httpでリダイレクト
        if( isset($_SERVER['HTTPS']) ) {
          $this->redirect('http://'.$_SERVER['HTTP_HOST']
 . $this->here);
          exit;
        }
      }
    }
  }
}