亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 建站經驗 > 正文

PHP的Yii框架中過濾器相關的使用總結

2024-08-30 19:06:48
字體:
來源:轉載
供稿:網友

Yii過濾器簡介

過濾器是一段代碼,可被配置在控制器動作執行之前或之后執行。例如, 訪問控制過濾器將被執行以確保在執行請求的動作之前用戶已通過身份驗證;性能過濾器可用于測量控制器執行所用的時間。

一個動作可以有多個過濾器。過濾器執行順序為它們出現在過濾器列表中的順序。過濾器可以阻止動作及后面其他過濾器的執行。

過濾器有兩種寫法:

基于方法的過濾器

基于自定義過濾器類的過濾器

無論哪種過濾器,都必須在控制器中重寫控制器的public function filters()方法,設置哪個過濾器對哪個動作起作用。

基于方法的過濾器

編寫基于方法的過濾器,要經過三步:

在控制器中編寫動作(Action);

在控制器中編寫過濾器函數,函數名必須以filter為前綴,如:function filterAccessControl();

重寫父類CController的filters()方法,定義過濾器與動作的關系;

實例:

  1. <?php  
  2.  
  3.   class UserController extends CController{  
  4.  
  5.     **  
  6.  
  7.      * 第一步:創建動作  
  8.  
  9.      */  
  10.  
  11.       function actionAdd(){   
  12.  
  13.         echo "actionAdd";  
  14.  
  15.       }  
  16.  
  17.       /**  
  18.  
  19.       * 第二步:創建基于方法的過濾器  
  20.  
  21.        */ 
  22.  
  23.       public function filterAddFilter($filterChain) {  
  24.  
  25.         echo "基于方法的過濾器UserController.filterAdd<br>";  
  26.  
  27.         $filterChain->run();  
  28.  
  29.       }  
  30.  
  31.       /**  
  32.  
  33.       * 第三步:重寫父類CController的filters()方法,定義過濾器與動作的關系  
  34.  
  35.       * @see CController::filters()  
  36.  
  37.       */ 
  38.  
  39.       public function filters(){  
  40.  
  41.         return array(  
  42.  
  43.       //定義過濾器與動作的關聯關系  
  44.  
  45.           'addFilter + add',  
  46.  
  47. //         array(  
  48.  
  49. //             'application.filters.TestFilter',            
  50.  
  51. //         ),  
  52.  
  53.             //Vevb.com 
  54.  
  55.       );  
  56.  
  57.     }  
  58.  
  59.   }  

自定義過濾器類

自定義過濾器類,需要單獨寫一個過濾器類,并繼承CFilter類,重寫CFilter類下的部分方法。大家可以看一下CFilter類的代碼,該類代碼不多,還是很容易看懂的。

自定義過濾器實例:

  1. <?php  
  2.  
  3. class TestFilter extends CFilter{  
  4.  
  5.   /**  
  6.  
  7.    * Performs the pre-action filtering.  
  8.  
  9.    * @param CFilterChain $filterChain the filter chain that the filter is on.  
  10.  
  11.    * @return boolean whether the filtering process should continue and the action  
  12.  
  13.    * should be executed.  
  14.  
  15.    */ 
  16.  
  17.   protected function preFilter($filterChain)  
  18.  
  19.   {  
  20.  
  21.     echo "--->TestFilter.preFilter.<br>";  
  22.  
  23.     return true;  
  24.  
  25.   }  
  26.  
  27.      
  28.  
  29.   /**  
  30.  
  31.    * Performs the post-action filtering.  
  32.  
  33.    * @param CFilterChain $filterChain the filter chain that the filter is on.  
  34.  
  35.    */ 
  36.  
  37.   protected function postFilter($filterChain)  
  38.  
  39.   {  
  40.  
  41.     echo "--->TestFilter.postFilter.<br>";  
  42.  
  43.   }  
  44.  
  45. }  

在控制器中注冊該自定義過濾器與動作的綁定關系:

  1. /** 
  2.  
  3. * 第三步:重寫父類CController的filters()方法,定義過濾器與動作的關系  
  4.  
  5. * @see CController::filters()  
  6.  
  7. */ 
  8.  
  9. ublic function filters(){  
  10.  
  11. return array(  
  12.  
  13.   //定義過濾器與動作的關聯關系  
  14.  
  15.     'addFilter + add',  
  16.  
  17.       array(  
  18.  
  19.           'application.filters.TestFilter',            
  20.  
  21.       ),  
  22.  
  23. );  

我自定義了一個過濾器:TestFilter,繼承了CFilter類,重寫了CFilter類的兩個主要方法:preFilter(前控制器,在動作執行前運行)和postFilter(后控制器,在動作執行后運行)。

兩種控制器的執行順序

假設我將上面編寫的自定義過濾器類與動作actionAdd綁定,那么,自定義過濾器繼承自父類CFilter兩個方法:preFilter和postFilter,與綁定的actionAdd之間的執行順序是怎樣的呢?

經過試驗,執行順序為:CFilter::preFilter--------->UserController::actionAdd--------->CFilter::postFilter。

也就是說,在動作執行前后都可以執行過濾操作。

那么文章開頭說“過濾器可以阻止動作及后面其他過濾器的執行”是怎么做到的呢?

看了CFilter::preFilter的官方注釋就知道了:

@return boolean whether the filtering process should continue and the action should be executed。

CFilter::preFilter函數默認return

true;即,默認執行后面的動作和后過濾器。如果在自定義過濾器類中,重寫CFilter::preFilter方法,并return

false;就可以阻止后面的動作和過濾器執行了!

使用過濾器

過濾器本質上是一類特殊的 行為,所以使用過濾器和 使用 行為一樣。 可以在控制器類中覆蓋它的 yii/base/Controller::behaviors() 方法來申明過濾器,如下所示:

  1. public function behaviors() 
  2.  
  3.  
  4.   return [ 
  5.  
  6.     [ 
  7.  
  8.       'class' => 'yii/filters/HttpCache'
  9.  
  10.       'only' => ['index''view'], 
  11.  
  12.       'lastModified' => function ($action$params) { 
  13.  
  14.         $q = new /yii/db/Query(); 
  15.  
  16.         return $q->from('user')->max('updated_at'); 
  17.  
  18.       }, 
  19.  
  20.     ], 
  21.  
  22.   ]; 
  23.  

控制器類的過濾器默認應用到該類的 所有 動作,你可以配置yii/base/ActionFilter::only屬性明確指定控制器應用到哪些動作。 在上述例子中,HttpCache 過濾器只應用到index和view動作。 也可以配置yii/base/ActionFilter::except屬性使一些動作不執行過濾器。

除了控制器外,可在 模塊或應用主體 中申明過濾器。 申明之后,過濾器會應用到所屬該模塊或應用主體的 所有 控制器動作, 除非像上述一樣配置過濾器的 yii/base/ActionFilter::only 和 yii/base/ActionFilter::except 屬性。

補充: 在模塊或應用主體中申明過濾器,在yii/base/ActionFilter::only 和 yii/base/ActionFilter::except 屬性中使用路由 代替動作ID, 因為在模塊或應用主體中只用動作ID并不能唯一指定到具體動作。.

當一個動作有多個過濾器時,根據以下規則先后執行:

預過濾

按順序執行應用主體中behaviors()列出的過濾器。

按順序執行模塊中behaviors()列出的過濾器。

按順序執行控制器中behaviors()列出的過濾器。

如果任意過濾器終止動作執行,后面的過濾器(包括預過濾和后過濾)不再執行。

成功通過預過濾后執行動作。

后過濾

倒序執行控制器中behaviors()列出的過濾器。

倒序執行模塊中behaviors()列出的過濾器。

倒序執行應用主體中behaviors()列出的過濾器。

創建過濾器

繼承 yii/base/ActionFilter 類并覆蓋 yii/base/ActionFilter::beforeAction() 和/或 yii/base/ActionFilter::afterAction() 方法來創建動作的過濾器,前者在動作執行之前執行,后者在動作執行之后執行。 yii/base/ActionFilter::beforeAction() 返回值決定動作是否應該執行, 如果為false,之后的過濾器和動作不會繼續執行。

下面的例子申明一個記錄動作執行時間日志的過濾器。

  1. namespace app/components; 
  2.  
  3. use Yii; 
  4.  
  5. use yii/base/ActionFilter; 
  6.  
  7. ?class ActionTimeFilter extends ActionFilter 
  8.  
  9.  
  10.   private $_startTime
  11.  
  12.  
  13.  
  14.   public function beforeAction($action
  15.  
  16.   { 
  17.  
  18.     $this->_startTime = microtime(true); 
  19.  
  20.     return parent::beforeAction($action); 
  21.  
  22.   } 
  23.  
  24.   public function afterAction($action$result
  25. //Vevb.com 
  26.   { 
  27.  
  28.     $time = microtime(true) - $this->_startTime; 
  29.  
  30.     Yii::trace("Action '{$action->uniqueId}' spent $time second."); 
  31.  
  32.     return parent::afterAction($action$result); 
  33.  
  34.   } 
  35.  

核心過濾器

Yii提供了一組常用過濾器,在yii/filters命名空間下,接下來我們簡要介紹這些過濾器。

1.yii/filters/AccessControl

AccessControl提供基于yii/filters/AccessControl::rules規則的訪問控制。 特別是在動作執行之前,訪問控制會檢測所有規則并找到第一個符合上下文的變量(比如用戶IP地址、登錄狀態等等)的規則, 來決定允許還是拒絕請求動作的執行,如果沒有規則符合,訪問就會被拒絕。

如下示例表示表示允許已認證用戶訪問create 和 update 動作,拒絕其他用戶訪問這兩個動作。

  1. use yii/filters/AccessControl; 
  2.  
  3. public function behaviors() 
  4.  
  5.  
  6.   return [ 
  7.  
  8.     'access' => [ 
  9.  
  10.       'class' => AccessControl::className(), 
  11.  
  12.       'only' => ['create''update'], 
  13.  
  14.       'rules' => [ 
  15.  
  16.         // 允許認證用戶 
  17.  
  18.         [ 
  19.  
  20.           'allow' => true, 
  21.  
  22.           'roles' => ['@'], 
  23.  
  24.         ], 
  25.  
  26.         // 默認禁止其他用戶 
  27.  
  28.       ], 
  29.  
  30.     ], 
  31.  
  32.   ]; 
  33.  

2.認證方法過濾器

認證方法過濾器通過HTTP Basic Auth或OAuth 2 來認證一個用戶,認證方法過濾器類在 yii/filters/auth 命名空間下。

如下示例表示可使用yii/filters/auth/HttpBasicAuth來認證一個用戶,它使用基于HTTP基礎認證方法的令牌。 注意為了可運行,yii/web/User::identityClass 類必須 實現 yii/web/IdentityInterface::findIdentityByAccessToken()方法。

  1. use yii/filters/auth/HttpBasicAuth; 
  2.  
  3. public function behaviors() 
  4.  
  5.  
  6.   return [ 
  7.  
  8.     'basicAuth' => [ 
  9.  
  10.       'class' => HttpBasicAuth::className(), 
  11.  
  12.     ], 
  13.  
  14.   ]; 
  15.  

認證方法過濾器通常在實現RESTful API中使用。

3.yii/filters/ContentNegotiator

ContentNegotiator支持響應內容格式處理和語言處理。 通過檢查 GET 參數和 Accept HTTP頭部來決定響應內容格式和語言。

如下示例,配置ContentNegotiator支持JSON和XML響應格式和英語(美國)和德語。

  1. use yii/filters/ContentNegotiator; 
  2.  
  3. use yii/web/Response; 
  4.  
  5. public function behaviors() 
  6.  
  7.  
  8.   return [ 
  9.  
  10.     [ 
  11.  
  12.       'class' => ContentNegotiator::className(), 
  13.  
  14.       'formats' => [ 
  15.  
  16.         'application/json' => Response::FORMAT_JSON, 
  17.  
  18.         'application/xml' => Response::FORMAT_XML, 
  19.  
  20.       ], 
  21.  
  22.       'languages' => [ 
  23.  
  24.         'en-US'
  25.  
  26.         'de'
  27.  
  28.       ], 
  29.  
  30.     ], 
  31.  
  32.   ]; 
  33.  

在應用主體生命周期過程中檢測響應格式和語言簡單很多, 因此ContentNegotiator設計可被引導啟動組件調用的過濾器。 如下例所示可以將它配置在應用主體配置。

  1. use yii/filters/ContentNegotiator; 
  2.  
  3. use yii/web/Response; 
  4.   
  5.  
  6.   'bootstrap' => [ 
  7.  
  8.     [ 
  9.  
  10.       'class' => ContentNegotiator::className(), 
  11.  
  12.       'formats' => [ 
  13.  
  14.         'application/json' => Response::FORMAT_JSON, 
  15.  
  16.         'application/xml' => Response::FORMAT_XML, 
  17.  
  18.       ], 
  19.  
  20.       'languages' => [ 
  21.  
  22.         'en-US'
  23.  
  24.         'de'
  25.  
  26.       ], 
  27.  
  28.     ], 
  29.  
  30.   ], 
  31.  
  32. ]; 

補充: 如果請求中沒有檢測到內容格式和語言,使用formats和languages第一個配置項。

4.yii/filters/HttpCache

HttpCache利用Last-Modified 和 Etag HTTP頭實現客戶端緩存。例如:

  1. use yii/filters/HttpCache; 
  2.  
  3. public function behaviors() 
  4.  
  5.  
  6.   return [ 
  7.  
  8.     [ 
  9.  
  10.       'class' => HttpCache::className(), 
  11.  
  12.       'only' => ['index'], 
  13.  
  14.       'lastModified' => function ($action$params) { 
  15.  
  16.         $q = new /yii/db/Query(); 
  17.  
  18.         return $q->from('user')->max('updated_at'); 
  19.  
  20.       }, 
  21.  
  22.     ], 
  23.  
  24.   ]; 
  25.  

5.yii/filters/PageCache

PageCache實現服務器端整個頁面的緩存。如下示例所示,PageCache應用在index動作, 緩存整個頁面60秒或post表的記錄數發生變化。它也會根據不同應用語言保存不同的頁面版本。

  1. use yii/filters/PageCache; 
  2.  
  3. use yii/caching/DbDependency; 
  4.  
  5. public function behaviors() 
  6.  
  7.  
  8.   return [ 
  9.  
  10.     'pageCache' => [ 
  11.  
  12.       'class' => PageCache::className(), 
  13.  
  14.       'only' => ['index'], 
  15.  
  16.       'duration' => 60, 
  17.  
  18.       'dependency' => [ 
  19.  
  20.         'class' => DbDependency::className(), 
  21.  
  22.         'sql' => 'SELECT COUNT(*) FROM post'
  23.  
  24.       ], 
  25.  
  26.       'variations' => [ 
  27.  
  28.         /Yii::$app->language, 
  29.  
  30.       ] 
  31.  
  32.     ], 
  33.  
  34.   ]; 
  35.  

6.yii/filters/RateLimiter

RateLimiter 根據 漏桶算法 來實現速率限制。

7.yii/filters/VerbFilter

VerbFilter檢查請求動作的HTTP請求方式是否允許執行,如果不允許,會拋出HTTP 405異常。 如下示例,VerbFilter指定CRUD動作所允許的請求方式。

  1. use yii/filters/VerbFilter; 
  2.  
  3. public function behaviors() 
  4.  
  5.  
  6.   return [ 
  7.  
  8.     'verbs' => [ 
  9.  
  10.       'class' => VerbFilter::className(), 
  11.  
  12.       'actions' => [ 
  13.  
  14.         'index' => ['get'], 
  15.  
  16.         'view'  => ['get'], 
  17.  
  18.         'create' => ['get''post'], 
  19.  
  20.         'update' => ['get''put''post'], 
  21.  
  22.         'delete' => ['post''delete'], 
  23.  
  24.       ], 
  25.  
  26.     ], 
  27.  
  28.   ]; 
  29.  

8.yii/filters/Cors

跨域資源共享 CORS 機制允許一個網頁的許多資源(例如字體、JavaScript等) 這些資源可以通過其他域名訪問獲取。 特別是JavaScript's AJAX 調用可使用 XMLHttpRequest 機制,由于同源安全策略該跨域請求會被網頁瀏覽器禁止. CORS定義瀏覽器和服務器交互時哪些跨域請求允許和禁止。

yii/filters/Cors 應在 授權 / 認證 過濾器之前定義,以保證CORS頭部被發送。

  1. use yii/filters/Cors; 
  2.  
  3. use yii/helpers/ArrayHelper; 
  4.  
  5. public function behaviors() 
  6.  
  7.  
  8.   return ArrayHelper::merge([ 
  9. //Vevb.com 
  10.     [ 
  11.  
  12.       'class' => Cors::className(), 
  13.  
  14.     ], 
  15.  
  16.   ], parent::behaviors()); 
  17.  

Cors 可轉為使用 cors 屬性。

cors['Origin']: 定義允許來源的數組,可為['*'] (任何用戶) 或 ['http://www.myserver.net', 'http://www.myotherserver.com']. 默認為 ['*'].

cors['Access-Control-Request-Method']: 允許動作數組如 ['GET', 'OPTIONS', 'HEAD']. 默認為 ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'].

cors['Access-Control-Request-Headers']: 允許請求頭部數組,可為 ['*'] 所有類型頭部 或 ['X-Request-With'] 指定類型頭部. 默認為 ['*'].

cors['Access-Control-Allow-Credentials']: 定義當前請求是否使用證書,可為 true, false 或 null (不設置). 默認為null.

cors['Access-Control-Max-Age']: 定義請求的有效時間,默認為 86400.

例如,允許來源為 http://www.myserver.net 和方式為 GET, HEAD 和 OPTIONS 的CORS如下:

  1. use yii/filters/Cors; 
  2.  
  3. use yii/helpers/ArrayHelper; 
  4.  
  5. public function behaviors() 
  6.  
  7.  
  8.   return ArrayHelper::merge([ 
  9.  
  10.     [ 
  11.  
  12.       'class' => Cors::className(), 
  13.  
  14.       'cors' => [ 
  15.  
  16.         'Origin' => ['http://www.myserver.net'], 
  17.  
  18.         'Access-Control-Request-Method' => ['GET''HEAD''OPTIONS'], 
  19.  
  20.       ], 
  21.  
  22.     ], 
  23.  
  24.   ], parent::behaviors()); 
  25.  

可以覆蓋默認參數為每個動作調整CORS 頭部。例如,為login動作增加Access-Control-Allow-Credentials參數如下所示:

  1. use yii/filters/Cors; 
  2.  
  3. use yii/helpers/ArrayHelper; 
  4.  
  5. public function behaviors() 
  6.  
  7.  
  8.   return ArrayHelper::merge([ 
  9.  
  10.     [ 
  11.  
  12.       'class' => Cors::className(), 
  13.  
  14.       'cors' => [ 
  15.  
  16.         'Origin' => ['http://www.myserver.net'], 
  17.  
  18.         'Access-Control-Request-Method' => ['GET''HEAD''OPTIONS'], 
  19.  
  20.       ], 
  21.  
  22.       'actions' => [ 
  23.  
  24.         'login' => [ 
  25.  
  26.           'Access-Control-Allow-Credentials' => true, 
  27. //Vevb.com 
  28.         ] 
  29.  
  30.       ] 
  31.  
  32.     ], 
  33.  
  34.   ], parent::behaviors()); 
  35.  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91精品久久久久久| 久久久久久久久久久免费精品| 成人高清视频观看www| 97在线观看免费高清| 91av在线播放| 成人激情视频在线观看| 国产成人一区三区| 成人性生交大片免费观看嘿嘿视频| 国产香蕉一区二区三区在线视频| 日韩在线资源网| 国产裸体写真av一区二区| 欧美黑人狂野猛交老妇| 日本久久久a级免费| 一本大道香蕉久在线播放29| 精品少妇一区二区30p| 亚洲国产精品久久精品怡红院| 日韩**中文字幕毛片| 亚洲成人黄色网| 欧美一区在线直播| 欧美日韩在线免费| 久久亚洲欧美日韩精品专区| 96pao国产成视频永久免费| 日韩av在线免费观看一区| 国产欧美亚洲视频| 国产精品狼人色视频一区| 中文字幕亚洲激情| 欧美黑人狂野猛交老妇| 日本老师69xxx| 久久视频在线观看免费| 国产精品视频不卡| 91成人免费观看网站| 成人黄色免费片| 欧美精品在线看| 精品国产一区二区三区久久狼黑人| 中文字幕精品视频| 麻豆国产va免费精品高清在线| 国产日韩精品在线观看| 日韩av手机在线看| 欧美福利小视频| 亚洲欧美日本精品| 国产日本欧美一区二区三区在线| 国产精品一香蕉国产线看观看| 亚洲国产中文字幕在线观看| 一个人www欧美| 欧美wwwxxxx| 97在线观看视频国产| 精品成人国产在线观看男人呻吟| 91精品国产自产在线| 欧美日韩国内自拍| 最近中文字幕2019免费| 久久久免费av| 丝袜亚洲另类欧美重口| 久久精品视频网站| 一本色道久久综合狠狠躁篇怎么玩| 欧美成人免费全部观看天天性色| 亚洲自拍偷拍色片视频| 疯狂蹂躏欧美一区二区精品| 亚洲国产成人久久综合一区| 色爱av美腿丝袜综合粉嫩av| 欧美午夜www高清视频| 亚洲精品理论电影| 亚洲护士老师的毛茸茸最新章节| 亚洲欧美国产va在线影院| 日韩中文字幕av| 亚洲一区999| 亚洲人永久免费| 亚洲综合日韩在线| www.亚洲成人| 亚洲精品中文字幕有码专区| 91精品综合久久久久久五月天| 97精品视频在线观看| 福利一区视频在线观看| 欧美日本亚洲视频| 法国裸体一区二区| 91影院在线免费观看视频| 国产色综合天天综合网| 琪琪第一精品导航| 97国产真实伦对白精彩视频8| 992tv成人免费视频| 日韩在线免费高清视频| 欧美午夜美女看片| 亚洲美女自拍视频| 亚洲精品久久久久久久久久久| 2019精品视频| 久久免费视频观看| 日韩欧美极品在线观看| 午夜精品蜜臀一区二区三区免费| 国产精品视频区1| 午夜精品一区二区三区在线视频| 97视频在线观看免费高清完整版在线观看| 精品久久久一区二区| 亚洲人成在线一二| 国产精品久久久久久久7电影| 色综合久久88色综合天天看泰| 亚洲精品一区二区三区不| 琪琪第一精品导航| xvideos亚洲人网站| 日韩精品在线免费播放| 人人爽久久涩噜噜噜网站| 欧洲日本亚洲国产区| 亚洲国产中文字幕久久网| 国产亚洲欧美另类中文| 麻豆精品精华液| 国产精品九九九| 亚洲激情在线观看| 国产精品天天狠天天看| 91精品久久久久久久久久另类| 亚洲图片欧美日产| 久久久久一本一区二区青青蜜月| 欧洲一区二区视频| 日韩欧美在线观看| 欧美精品久久久久久久久久| 亚洲精品二三区| 国产精品久久久久久久久久免费| 亚洲女在线观看| 欧美日韩成人在线播放| 亚洲综合最新在线| 亚洲天堂av图片| 色婷婷综合成人av| 欧美日韩裸体免费视频| 亚洲精品久久久久久久久| 亚洲免费人成在线视频观看| 亚洲精品国产精品国自产在线| 在线免费观看羞羞视频一区二区| 亚洲国产成人精品久久久国产成人一区| 成人亚洲欧美一区二区三区| 亚洲二区在线播放视频| 国产精品免费视频久久久| 国产精品福利无圣光在线一区| 国产精品美女www爽爽爽视频| 55夜色66夜色国产精品视频| 欧美性猛交xxxx乱大交极品| 国产成人欧美在线观看| 色噜噜国产精品视频一区二区| 国产精品亚洲美女av网站| 欧美大全免费观看电视剧大泉洋| 全亚洲最色的网站在线观看| 亚洲视频一区二区三区| 日韩电视剧在线观看免费网站| 国产精品激情av在线播放| 欧美午夜久久久| www亚洲欧美| 欧美高跟鞋交xxxxhd| 91精品国产综合久久香蕉| www.亚洲免费视频| 亚洲性夜色噜噜噜7777| 日韩av三级在线观看| 日韩av成人在线观看| 国产综合在线视频| 国产精品亚洲综合天堂夜夜| 国产精品久久久久久久av大片| 国产成人福利视频| 久久久97精品| 日韩欧美大尺度| 成人激情视频网| 国产一区二区美女视频| 91福利视频在线观看| 亚洲一区二区三区乱码aⅴ| 国产精品久久久久不卡| 亚洲女人被黑人巨大进入| 欧美日韩国产影院| 国产精品三级在线| 亚洲电影成人av99爱色| 国产免费成人av|