Yii Controller Action で HTTPS (SSL) を強制する方法を知りたいです。
質問する
6297 次
3 に答える
7
この記事を見てみましょうhttp://www.yiiframework.com/forum/index.php/topic/25407-forcing-https-in-yii/
class HttpsFilter extends CFilter {
protected function preFilter( $filterChain ) {
if ( !Yii::app()->getRequest()->isSecureConnection ) {
# Redirect to the secure version of the page.
$url = 'https://' .
Yii::app()->getRequest()->serverName .
Yii::app()->getRequest()->requestUri;
Yii::app()->request->redirect($url);
return false;
}
return true;
}
}
さらに詳細については、これを参照してください。
于 2012-10-22T10:59:54.947 に答える
1
私が必要としていたアプリケーション全体に https 強制を適用したいだけの場合は、これを protected/components/Controller.php に入れることができます。
public function beforeAction($action) {
if( ! Yii::app()->getRequest()->isSecureConnection ) {
$url = 'https://' .
Yii::app()->getRequest()->serverName .
Yii::app()->getRequest()->requestUri;
Yii::app()->request->redirect($url);
return false;
}
}
サイト全体の https が必要な場合、これはフィルターよりもクリーンなソリューションです。フィルターを使用すると、作成するすべての子コントローラーの親コントローラーで array_merge を適用する必要があるためです。1 つでも見逃した場合、そのコントローラーの https 強制はありません。これの小さな欠点は、フィルターが呼び出された後に呼び出されることです。つまり、リダイレクトの前に、通常よりも多くの処理が行われます。
コントローラーごと、またはアクションごとに必要な場合は、フィルターが必要です。
于 2014-05-22T21:22:19.577 に答える
0
コード:
private static $secureRoutes = array('site/login'=>'',);
public function filterAccessControl($filterChain) {
if(!Yii::app()->getRequest()->isSecureConnection && array_key_exists($filterChain->controller->route, self::$secureRoutes)){
$this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), 'https'));
return false;
}
else if(Yii::app()->getRequest()->isSecureConnection && !array_key_exists($filterChain->controller->route, self::$secureRoutes)){
$this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), 'http'));
return false;
}
}
于 2013-05-28T06:38:58.967 に答える