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

首頁 > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

PHP的Yii框架中過濾器相關(guān)的使用總結(jié)

2024-08-30 19:06:48
字體:
供稿:網(wǎng)友

Yii過濾器簡(jiǎn)介

過濾器是一段代碼,可被配置在控制器動(dòng)作執(zhí)行之前或之后執(zhí)行。例如, 訪問控制過濾器將被執(zhí)行以確保在執(zhí)行請(qǐng)求的動(dòng)作之前用戶已通過身份驗(yàn)證;性能過濾器可用于測(cè)量控制器執(zhí)行所用的時(shí)間。

一個(gè)動(dòng)作可以有多個(gè)過濾器。過濾器執(zhí)行順序?yàn)樗鼈兂霈F(xiàn)在過濾器列表中的順序。過濾器可以阻止動(dòng)作及后面其他過濾器的執(zhí)行。

過濾器有兩種寫法:

基于方法的過濾器

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

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

基于方法的過濾器

編寫基于方法的過濾器,要經(jīng)過三步:

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

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

重寫父類CController的filters()方法,定義過濾器與動(dòng)作的關(guān)系;

實(shí)例:

  1. <?php  
  2.  
  3.   class UserController extends CController{  
  4.  
  5.     **  
  6.  
  7.      * 第一步:創(chuàng)建動(dòng)作  
  8.  
  9.      */  
  10.  
  11.       function actionAdd(){   
  12.  
  13.         echo "actionAdd";  
  14.  
  15.       }  
  16.  
  17.       /**  
  18.  
  19.       * 第二步:創(chuàng)建基于方法的過濾器  
  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()方法,定義過濾器與動(dòng)作的關(guān)系  
  34.  
  35.       * @see CController::filters()  
  36.  
  37.       */ 
  38.  
  39.       public function filters(){  
  40.  
  41.         return array(  
  42.  
  43.       //定義過濾器與動(dòng)作的關(guān)聯(lián)關(guān)系  
  44.  
  45.           'addFilter + add',  
  46.  
  47. //         array(  
  48.  
  49. //             'application.filters.TestFilter',            
  50.  
  51. //         ),  
  52.  
  53.             //Vevb.com 
  54.  
  55.       );  
  56.  
  57.     }  
  58.  
  59.   }  

自定義過濾器類

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

自定義過濾器實(shí)例:

  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. }  

在控制器中注冊(cè)該自定義過濾器與動(dòng)作的綁定關(guān)系:

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

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

兩種控制器的執(zhí)行順序

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

經(jīng)過試驗(yàn),執(zhí)行順序?yàn)椋篊Filter::preFilter--------->UserController::actionAdd--------->CFilter::postFilter。

也就是說,在動(dòng)作執(zhí)行前后都可以執(zhí)行過濾操作。

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

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

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

CFilter::preFilter函數(shù)默認(rèn)return

true;即,默認(rèn)執(zhí)行后面的動(dòng)作和后過濾器。如果在自定義過濾器類中,重寫CFilter::preFilter方法,并return

false;就可以阻止后面的動(dòng)作和過濾器執(zhí)行了!

使用過濾器

過濾器本質(zhì)上是一類特殊的 行為,所以使用過濾器和 使用 行為一樣。 可以在控制器類中覆蓋它的 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.  

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

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

補(bǔ)充: 在模塊或應(yīng)用主體中申明過濾器,在yii/base/ActionFilter::only 和 yii/base/ActionFilter::except 屬性中使用路由 代替動(dòng)作ID, 因?yàn)樵谀K或應(yīng)用主體中只用動(dòng)作ID并不能唯一指定到具體動(dòng)作。.

當(dāng)一個(gè)動(dòng)作有多個(gè)過濾器時(shí),根據(jù)以下規(guī)則先后執(zhí)行:

預(yù)過濾

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

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

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

如果任意過濾器終止動(dòng)作執(zhí)行,后面的過濾器(包括預(yù)過濾和后過濾)不再執(zhí)行。

成功通過預(yù)過濾后執(zhí)行動(dòng)作。

后過濾

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

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

倒序執(zhí)行應(yīng)用主體中behaviors()列出的過濾器。

創(chuàng)建過濾器

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

下面的例子申明一個(gè)記錄動(dòng)作執(zhí)行時(shí)間日志的過濾器。

  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命名空間下,接下來我們簡(jiǎn)要介紹這些過濾器。

1.yii/filters/AccessControl

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

如下示例表示表示允許已認(rèn)證用戶訪問create 和 update 動(dòng)作,拒絕其他用戶訪問這兩個(gè)動(dòng)作。

  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.         // 允許認(rèn)證用戶 
  17.  
  18.         [ 
  19.  
  20.           'allow' => true, 
  21.  
  22.           'roles' => ['@'], 
  23.  
  24.         ], 
  25.  
  26.         // 默認(rèn)禁止其他用戶 
  27.  
  28.       ], 
  29.  
  30.     ], 
  31.  
  32.   ]; 
  33.  

2.認(rèn)證方法過濾器

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

如下示例表示可使用yii/filters/auth/HttpBasicAuth來認(rèn)證一個(gè)用戶,它使用基于HTTP基礎(chǔ)認(rèn)證方法的令牌。 注意為了可運(yùn)行,yii/web/User::identityClass 類必須 實(shí)現(xiàn) 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.  

認(rèn)證方法過濾器通常在實(shí)現(xiàn)RESTful API中使用。

3.yii/filters/ContentNegotiator

ContentNegotiator支持響應(yīng)內(nèi)容格式處理和語言處理。 通過檢查 GET 參數(shù)和 Accept HTTP頭部來決定響應(yīng)內(nèi)容格式和語言。

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

  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.  

在應(yīng)用主體生命周期過程中檢測(cè)響應(yīng)格式和語言簡(jiǎn)單很多, 因此ContentNegotiator設(shè)計(jì)可被引導(dǎo)啟動(dòng)組件調(diào)用的過濾器。 如下例所示可以將它配置在應(yīng)用主體配置。

  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. ]; 

補(bǔ)充: 如果請(qǐng)求中沒有檢測(cè)到內(nèi)容格式和語言,使用formats和languages第一個(gè)配置項(xiàng)。

4.yii/filters/HttpCache

HttpCache利用Last-Modified 和 Etag HTTP頭實(shí)現(xiàn)客戶端緩存。例如:

  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實(shí)現(xiàn)服務(wù)器端整個(gè)頁面的緩存。如下示例所示,PageCache應(yīng)用在index動(dòng)作, 緩存整個(gè)頁面60秒或post表的記錄數(shù)發(fā)生變化。它也會(huì)根據(jù)不同應(yīng)用語言保存不同的頁面版本。

  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 根據(jù) 漏桶算法 來實(shí)現(xiàn)速率限制。

7.yii/filters/VerbFilter

VerbFilter檢查請(qǐng)求動(dòng)作的HTTP請(qǐng)求方式是否允許執(zhí)行,如果不允許,會(huì)拋出HTTP 405異常。 如下示例,VerbFilter指定CRUD動(dòng)作所允許的請(qǐng)求方式。

  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 機(jī)制允許一個(gè)網(wǎng)頁的許多資源(例如字體、JavaScript等) 這些資源可以通過其他域名訪問獲取。 特別是JavaScript's AJAX 調(diào)用可使用 XMLHttpRequest 機(jī)制,由于同源安全策略該跨域請(qǐng)求會(huì)被網(wǎng)頁瀏覽器禁止. CORS定義瀏覽器和服務(wù)器交互時(shí)哪些跨域請(qǐng)求允許和禁止。

yii/filters/Cors 應(yīng)在 授權(quán) / 認(rèn)證 過濾器之前定義,以保證CORS頭部被發(fā)送。

  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 可轉(zhuǎn)為使用 cors 屬性。

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

cors['Access-Control-Request-Method']: 允許動(dòng)作數(shù)組如 ['GET', 'OPTIONS', 'HEAD']. 默認(rèn)為 ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'].

cors['Access-Control-Request-Headers']: 允許請(qǐng)求頭部數(shù)組,可為 ['*'] 所有類型頭部 或 ['X-Request-With'] 指定類型頭部. 默認(rèn)為 ['*'].

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

cors['Access-Control-Max-Age']: 定義請(qǐng)求的有效時(shí)間,默認(rèn)為 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.  

可以覆蓋默認(rèn)參數(shù)為每個(gè)動(dòng)作調(diào)整CORS 頭部。例如,為login動(dòng)作增加Access-Control-Allow-Credentials參數(shù)如下所示:

  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.  

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
大片在线观看网站免费收看| 日韩成人免费| 国产精品自在欧美一区| 成人系列视频| 欧美一区二区高清在线观看| 浪潮av一区| 蜜臀av免费一区二区三区| 手机在线中文字幕| 日韩欧美色综合网站| 亚洲一区二区毛片| 国产又黄又粗又硬| 天堂а在线中文在线无限看推荐| 日韩欧美亚洲区| 九九热精品视频国产| 日韩欧美在线网址| 在线不卡中文字幕| 日韩亚洲欧美成人一区| 免费av观看网址| 日韩在线一区二区三区免费视频| 欧美视频亚洲图片| 性直播体位视频在线观看| 国产视频一区二区三区四区| 在线免费观看欧美| 亚洲卡通动漫在线| av不卡在线看| 日韩av在线精品| 久久国产一区二区三区| 岛国一区二区三区高清视频| av先锋资源网| 国产精品夜夜夜一区二区三区尤| h片在线观看下载| 日韩毛片免费视频一级特黄| av资源久久| av在线免费观看网址| 影音先锋男人资源站在线观看| 法国空姐在线观看免费| 黄色片免费在线| 99视频在线精品国自产拍免费观看| 特级丰满少妇一级| 国产传媒一区二区| 99热手机在线观看| 欧美精品一区二区三区在线播放| 人人妻人人藻人人爽欧美一区| 青青草国产一区二区三区| 欧美国产精品一区二区| 国产一区二区视频在线观看| 香蕉久久网站| 少妇高潮久久久| 激情成人午夜视频| 凹凸成人精品亚洲精品密奴| xxxwww国产| 一区二区不卡在线播放| 国产又黄又爽免费视频| 精品国产一区二区三区不卡蜜臂| 蜜臀99久久精品久久久久久软件| 99re6热只有精品免费观看| 亚洲高清毛片一区二区| 日本中文字幕高清| 日韩电影中文字幕av| 五月婷婷激情在线| 亚洲夫妻av| 天堂中文资源在线观看| 欧美色就是色| 亚洲综合一区二区| 91tv精品福利国产在线观看| 国产天堂第一区| 婷婷视频在线| 麻豆乱码国产一区二区三区| 天堂…中文在线最新版在线| 日韩精品高清在线观看| 亚洲AV成人精品| 看黄色录像一级片| 懂色av中文字幕一区二区三区| 青青草成人在线观看| 日本久久一二三四| 狂野欧美性猛交xxxx| 狠狠狠狠狠狠狠| 依依成人精品视频| 欧美日韩国产探花| 久久久国产精品无码| 成人免费不卡视频| 精品在线一区二区| 国产真实乱人偷精品视频| 欧美成人xxxxx| 亚洲欧洲综合| 中文字幕这里只有精品| 色婷婷av一区二区三区之红樱桃| 成人毛片一区二区三区| 欧区一欧区二欧区三| 中出一区二区| www.久久91| 97欧洲一区二区精品免费| 亚洲网站视频在线观看| 欧洲av一区| 国产在线一区二区三区四区| 亚洲男人天堂色| 亚洲av无码国产精品麻豆天美| 久久精品视频91| 国产免费不卡视频| 国产激情美女久久久久久吹潮| 欧美熟妇乱码在线一区| 国产剧情久久久| 欧美另类极限扩张| а√天堂中文在线资源bt在线| 中文字幕精品国产| 欧美日韩乱国产| 日本人成精品视频在线| 激情久久av| 国产理论在线观看| 无码人妻久久一区二区三区不卡| 欧美大胆a级| 天天干夜夜夜操| 欧美一卡2卡3卡4卡| 亚洲AV无码精品国产| 国产人妖伪娘一区91| 精品欧美一区二区久久| 国产一区二区三区高清| 亚洲精品视频啊美女在线直播| 全亚洲最色的网站在线观看| 欧美成人精品二区三区99精品| 美腿丝袜亚洲三区| 午夜福利三级理论电影| 一区二区视频在线观看| 日韩精品视频中文字幕| 黄色av免费网站| 1区1区3区4区产品乱码芒果精品| 久久精品日产第一区二区三区精品版| 99热这里只有精品在线| 国产一区二区三区在线视频| 99久热在线精品视频| 久久久国产精品麻豆| 激情综合丁香| 欧美极品中文字幕| 超碰人人人人人人人| 欧美成人精品一区二区男人看| 日韩av电影资源网| 国产5g影院天天爽天天看| 麻豆av免费看| 亚洲va欧美va人人爽成人影院| 醉酒壮男gay强迫野外xx| 久久久久久免费观看| 欧美精品免费在线观看| 亚洲视频在线a| 免费观看黄网站| 91在线视频播放| 99久热re在线精品996热视频| 在线播放日韩欧美| 9人人澡人人爽人人精品| 国产91对白在线播放| 国产一区二区麻豆| 日韩一级免费看| 国产毛片一区二区三区| 日韩免费av一区二区三区| 成人资源www网在线最新版| 在线观看黄网站免费继续| 欧美va亚洲va在线观看蝴蝶网| 国产精品一区二区你懂的| 欧美激情三级| 国产精品美日韩| 国风产精品一区二区| av影院在线免费观看| 久久精品国产亚洲夜色av网站| 夜夜躁狠狠躁日日躁av| 91麻豆国产语对白在线观看| 999精品嫩草久久久久久99| 日本aaa视频| caoporn免费在线视频| 四虎影院在线域名免费观看| 日韩1区2区日韩1区2区| 这里只有精品在线观看| 欧美美女在线直播| 亚洲精选一二三| 精品麻豆剧传媒av国产九九九| 97视频免费在线看| 久久精品99久久久久久久久| 欧美午夜寂寞影院| 99久久精品费精品国产一区二区| 久久电影天堂| jizz视频| 国产真人真事毛片| 成人影院在线观看视频| 国产亚洲小视频| 欧美一区二区三区视频免费播放| 国产剧情一区| 老司机在线永久免费观看| 国产伦精品一区二区三区高清| 中文字幕乱在线伦视频中文字幕乱码在线| 最近2018年手机中文在线| 九七影院97影院理论片久久| www红色一片_亚洲成a人片在线观看_| 成年人网站免费看| 亚洲不卡免费视频| 久久综合色播| 美女性感视频久久久| 视频在线一区二区三区| 极品尤物一区二区| 交换国产精品视频一区| 欧美欧美天天天天操| 日韩一区二区三区不卡| 日韩美女一级片| 国产亚洲一区二区三区四区| 国产模特精品视频久久久久| 偷偷要 色偷偷| 国产69精品久久久久按摩| 国产一级影片| 亚洲都市激情| 6080亚洲理论片在线观看| 九九九热视频| 欧美sss在线视频| 91av视频在线播放| 无码人妻精品一区二区三区蜜桃91| 天天做天天爱天天爽综合网| 日本一区二区视频在线| 国产黄色三级网站| 亚洲精选中文字幕| 国产无遮挡又黄又爽| 潘金莲一级黄色片| 亚洲一区二区三区久久久| 久久uomeier| 日本一级理论片在线大全| 污视频在线观看免费| 蜜桃视频一区二区三区| 久久久久高清精品| 国产毛片久久久久| 亚洲一区二区三区无吗| 国产亚洲成aⅴ人片在线观看| 欧美激情综合五月色丁香| 91精品免费| 四虎精品永久免费| 精品少妇人妻av一区二区三区| 欧美做暖暖视频| av一区观看| 91九色蝌蚪成人| 国产一级做a爰片久久毛片男| 男女猛烈无遮挡午夜视频| 日本欧美一级片| 久久精品久久精品亚洲人| av在线播放网| 韩国版免费三体| 玖玖玖视频精品| 三级福利片在线观看| bdsm在线观看播放视频| 一二区在线观看| 亚洲天堂av中文字幕| 国产一区二区在线|播放| 蜜臀久久久久久999| 国产裸体永久免费无遮挡| 99视频在线播放| 69xxx视频hd| 久久丫精品忘忧草西安产品| 蜜乳av一区| 欧美日韩不卡中文字幕在线| 东北一级毛片| 亚洲老女人视频免费| 日韩欧美影院| 黄色资源网久久资源365| 99精品免费在线观看| 日韩第一页在线| 一本一道dvd在线观看免费视频| 国产精品亚洲午夜一区二区三区| 91精品国产成人| 国产精品久久久久一区| 一区二区三区日韩欧美| 欧美日韩亚洲一区三区| 亚洲一区三区电影在线观看| 成人国产精品久久久| 日本午夜精品久久久久| 欧美最猛性xxxxx直播| 天堂网www在线观看| av观看免费在线| 国产一级片免费在线观看| av老司机在线观看| 国内精品久久久久久中文字幕| 欧美疯狂xxxx大交乱88av| 亚洲第一在线| 一区二区三区在线观看网站| 成人午夜激情网| 精品少妇一区二区三区在线播放| 久久影院一区| 天天干天天干天天干天天| 1024精品合集| 国产色综合天天综合网| 亚洲少妇30p| 亚洲 中文字幕 日韩 无码| 麻豆导航在线观看| 欧美性xxxx交| www四虎com| 男人的天堂导航| 僵尸世界大战2 在线播放| 欧美性受xxxx黑人猛交88| 精品精品国产三级a∨在线| 久久综合第一页| 欧美日韩1区2区3区| 青青青草网站免费视频在线观看| 自拍偷拍在线视频| 欧美情侣在线播放| 国产精品久久久久久久久久东京| 欧美视频在线视频| 国产大屁股喷水视频在线观看| 91成品视频入口| 91社区在线观看| 国产不卡视频在线| 国产精品高潮呻吟AV无码| 欧美1819sex性处18免费| 黄色一级在线视频| 精品无码一区二区三区在线| 夜夜爽8888| 精品视频一区在线视频| 日本熟妇一区二区三区| 亚洲午夜一级| 日韩精品999| 欧美日韩精品免费观看视频完整| 在线观看免费一区二区| 五月综合激情日本mⅴ| 97超碰在线公开在线看免费| 亚洲男人天堂2023| 男人天堂av网| 日韩日本欧美亚洲| 久久精品国内一区二区三区| 羞羞的视频网站| 欧美最猛性xxxx高清| 好看的日韩av电影| 午夜激情在线观看视频| 农村末发育av片一区二区| 9191在线观看| 国产精品r级在线| 亚洲精品一区二区三区99| 五月天网站亚洲|