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

首頁 > 開發(fā) > AJAX > 正文

jQuery的Ajax用戶認證和注冊技術(shù)實例教程(附demo源碼)

2024-09-01 08:33:07
字體:
供稿:網(wǎng)友
這篇文章主要介紹了jQuery的Ajax用戶認證和注冊技術(shù),結(jié)合完整實例較為詳細的分析講解了jQuery中ajax方法實現(xiàn)用戶驗證與注冊的相關(guān)技巧與注意事項,并附帶了demo源碼供讀者下載,需要的朋友可以參考下
 

前面介紹了《jquery+ajax注冊實時驗證》及《jQuery使用$.ajax進行即時驗證的方法》。這里進一步總結(jié)了jQuery的Ajax用戶認證和注冊技術(shù)。分享給大家供大家參考,具體如下:

Ajax 表單提交是一個功能強大的技術(shù),提供一種發(fā)送 web 表單的方法,無需重載瀏覽器窗口。jQuery 庫讓您使用 Ajax 表單提交功能進一步提供一個方便快捷的方法,以少量代碼生成可用 Ajax 的 Web 表單。在本文中,學(xué)習(xí)如何使用 jQuery 創(chuàng)建基礎(chǔ) Ajax 表單提交,以及如何使用該技術(shù)驗證一個用戶。本文使用 jQuery 演示了 Ajax 用戶注冊技術(shù),比如,檢查用戶名可用性,以及當(dāng)選擇的用戶名已存在時提示用戶名。既不需要表單提交也無需頁面重載。

如果您對 jQuery 不是很熟悉,它本質(zhì)上是一個 JavaScript 庫,使 JavaScript 開發(fā)變得很容易。它使所需的代碼量最小化,因為它有許多內(nèi)置功能,這樣您就不再需要為這些功能編寫客戶端函數(shù)或?qū)ο罅?。更多信息和下載 jQuery 庫的鏈接,可參見本站相關(guān)資料;或者,如您在所有代碼樣例中看到的那樣,可以直接嵌入 jQuery 庫的當(dāng)前版本。

使用 jQuery 進行表單提交

無需重載即可提交一個表單在很多場景中都是很有用的。例如,有了它,您就可以在提交表單之前使用 JavaScript 代碼驗證表單字段,來在一個單頁面應(yīng)用程序中提交表單或者 — 如本文所示— 確定是否用戶名已經(jīng)注冊過。使用 jQuery 觸發(fā)一個表單提交有兩種方法:使用 submit 處理函數(shù)或 click 處理函數(shù)。清單 1 顯示了如何使用 submit 處理函數(shù)提交一個表單。

清單 1. 使用 jQuery 的 submit 處理函數(shù)提交表單

<script type="text/javascript" src="http://code.jquery.com/jquery.js"></script><script type="text/javascript">$(document).ready(function() { $('#submitForm').submit(function(e) { alert($('#sample').attr('value')); return e.preventDefault(); });});</script><form id="submitForm" method="post"> <input type="text" name="sample" id="sample" value="Enter something" /> <input type="submit" id="submitBtn" value="Submit" /></form>

使用 click 處理函數(shù)提交表單

清單 2. 使用 jQuery 的 click 處理函數(shù)提交表單

<script type="text/javascript"  src="http://code.jquery.com/jquery.js"></script><script type="text/javascript">$(document).ready(function() { $('#submitBtn').click(function(e) { alert($('#sample').attr('value')); return e.preventDefault(); });});</script><form id="submitForm" method="post"> <input type="text" name="sample" id="sample" value="Enter something" /> <input type="submit" id="submitBtn" value="Submit" /></form>

這兩個清單基本上是一樣的:它們都是嵌入 jQuery 庫的,在訪問任何元素之前使用 ready 處理函數(shù)確認頁面被加載,處理函數(shù)包括相同的代碼。惟一的不同是處理函數(shù)和分配給處理函數(shù)的元素。submit 處理函數(shù)需要分配一個表單元素,而 click 處理函數(shù),任何可點擊的元素即可 — 本例中是 Submit 按鈕。為了避免提交表單時刷新頁面,您必須使用 preventDefault 函數(shù)。要訪問 preventDefault 函數(shù),您必須傳遞處理函數(shù)(即使作為一個參數(shù))或者使用它訪問該函數(shù)。

盡管以上兩種選擇都是有效的,但 submit 處理函數(shù)更為常用些。然而,有些情況下,您可能又不止一個 Submit 按鈕,這就需要每個按鈕一個 click 處理函數(shù)。清單 3 展示了這樣一個必須使用 click 處理函數(shù)的場景,因為兩個 Submit 按鈕都能觸發(fā)表單提交。

清單 3. 使用兩個 submit 按鈕提交表單

<script type="text/javascript"  src="http://code.jquery.com/jquery.js"></script><script type="text/javascript" src="register.js"></script><div id="container"> <div id="message"></div> <form method="post" id="mainform"> <label for="username">Username</label> <input type="text" name="username" id="username" value="" /> <label for="password">Password</label> <input type="password" name="password" value="" /> <input type="submit" name="action" id="login" value="Log in" /> <h2>Extra options (registration only)</h2> <label for="firstname">First name</label> <input type="text" name="firstname" value="" /> <label for="lastname">Last name</label> <input type="text" name="lastname" value="" /> <label for="email">Email</label> <input type="text" name="email" value="" /> <input type="submit" name="action" id="register" value="Register" /> </form></div>

注意,在本例中這個表單可以執(zhí)行多個活動:現(xiàn)有用戶可以登錄,新用戶可以通過輸入附加賬戶信息進行注冊。使用表單上的 submit 處理函數(shù)在這種場景中不能運行,因為它不能確定哪個按鈕觸發(fā)表單提交。因此,清單 4 使用 click 處理函數(shù)來確定每個按鈕采取什么行動,便于您以后依此處理數(shù)據(jù)。

清單 4. register.js 中提交按鈕的 Click 處理函數(shù)

$(document).ready(function() { $("#register, #login").click(function(e) { var name = ($(event.target).attr('id') == 'register') ? 'Registration' : 'Login'; return e.preventDefault(); });});

文檔準備好后,您需要為 Register 和 Login 按鈕分配 click 處理函數(shù)。click 處理函數(shù)接收一個參數(shù),命名為 e(作為事件) 。此事件對象稍后用來預(yù)防默認表單提交。正如之前代碼所述。當(dāng) click 處理函數(shù)被調(diào)用時,當(dāng)前被點擊的對象的 ID 被訪問,用來確定這是一個用戶登錄還是一個新用戶注冊。

現(xiàn)在,您已經(jīng)知道了使用 jQuery 如何提交表單,我們來看看使用 jQuery 中的 Ajax 和 PHP 如何認證一個用戶。

使用 jQuery 中的 Ajax 功能注冊和認證一個用戶

要認證和注冊一個用戶,您需要一個服務(wù)器端語言和一個數(shù)據(jù)庫。在本文中,服務(wù)器端語言是 PHP,數(shù)據(jù)庫是 MySQL,您不需要使用任何特定的服務(wù)器端語言或者數(shù)據(jù)庫來創(chuàng)建此函數(shù)。

首先開始在 JavaScript 文件中編寫附加代碼,使用 Ajax 將表單發(fā)送給 PHP 。清單 5 的代碼開始也類似于清單 4 ,因為它包含按鈕的 ready 處理函數(shù)和 click 處理函數(shù),而且它確定點擊哪個按鈕。然后,如果消息元素是打開的,您需要使用 slideUp 函數(shù)關(guān)閉它的。咋一看 Ajax 調(diào)用不是很明顯,特別是如果您過去通常不 使用 jQuery 創(chuàng)建 Ajax,因為您通常使用簡寫函數(shù)來發(fā)送調(diào)用,在代碼中甚至都沒提及 Ajax。

清單 5. 使用 jQuery 中的 Ajax 提交一個 web 表單

$(document).ready(function() { $("#register, #login").click(function(e) { var name = ($(event.target).attr('id') == 'register') ? 'Registration' : 'Login'; $('#message').slideUp('fast'); $.post('service.php', $('#mainform').serialize()   +'&action='+ $(event.target).attr('id'), function(data) {  var code = $(data)[0].nodeName.toLowerCase();  $('#message').removeClass('error');  $('#message').removeClass('success');  $('#message').addClass(code);  if(code == 'success') {  $('#message').html(name + ' was successful.');  }  else if(code == 'error') {  $('#message').html('An error occurred, please try again.');  }  $('#message').slideDown('fast'); }); return e.preventDefault(); });});

post 函數(shù)是一個簡寫函數(shù),等價于清單 6 中的代碼。它將文件路徑指向被請求的文件、序列化數(shù)據(jù)、最后是一個回調(diào)函數(shù)。用 jQuery 序列化表單數(shù)據(jù)比較容易:您只需要訪問 form 元素和調(diào)用 serialize 功能獲取一個標準查詢字符串?;卣{(diào)函數(shù)首先通過訪問響應(yīng)的第一個節(jié)點來確定調(diào)用是成功還是失?。篜HP 文件以一個名為 success or error 的節(jié)點返回結(jié)果。狀態(tài)確定之后,您就可以從之前的表單提交中刪除 message 元素中留下的任何類。然后添加一個響應(yīng)成功對應(yīng)的類。message 元素被附加到聲明成功或錯誤消息的 HTML 后,然后使用 jQuery 的 slideDown 函數(shù)打開 message。

清單 6. jQuery Ajax 函數(shù)

$.ajax({ type: 'POST', url: url, data: data, success: success dataType: dataType});

在創(chuàng)建同數(shù)據(jù)庫交互的 PHP 文件之前,您需要構(gòu)建您計劃保存新用戶和選擇現(xiàn)有用戶表單的數(shù)據(jù)庫。清單 7 包含了您需要的 SQL 代碼,來創(chuàng)建名為 ibm_user_auth 的 MySQL 表,其中包括一個 ID,用戶名、密碼、名字、姓、以及 Email 地址。ID 被設(shè)置為自動增量并作為主鍵。其他值都是 tinytext 型的,除了密碼,密碼是 varchar(32) 的,因為稍后您將使用它來保存一個消息摘要算法 5(MD5)加密的值。

清單 7. 為用戶創(chuàng)建 MySQL 數(shù)據(jù)庫表的 SQL 代碼

CREATE TABLE `ibm_user_auth` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` tinytext NOT NULL, `password` varchar(32) NOT NULL, `firstname` tinytext NOT NULL, `lastname` tinytext NOT NULL, `email` tinytext NOT NULL, PRIMARY KEY (`id`));

表構(gòu)建完成之后,您就可以開始編寫與數(shù)據(jù)庫交互的 PHP 代碼了。您將在您的 Ajax post 函數(shù)中調(diào)用該文件 — 名為 service.php。清單 8 顯示了構(gòu)成該文件的代碼。首先定義數(shù)據(jù)庫連接變量。數(shù)據(jù)庫信息建立之后,確保用戶名和密碼被通過表單張貼傳遞;如果是這樣,提取張貼數(shù)據(jù)然后連接到數(shù)據(jù)庫?,F(xiàn)在您已經(jīng)連接到數(shù)據(jù)庫了,需要確定是否使用發(fā)送數(shù)據(jù)來登錄一個已有用戶或注冊他/她作為一個新用戶。您只需要檢查 action 變量是從張貼數(shù)據(jù)提取的和被 Ajax 表單張貼發(fā)送的,就可以確定了。

如果您確定這是一個新用戶注冊,您也需要確定名字、姓和 email 地址已經(jīng)發(fā)送。否則,只能是一個錯誤,當(dāng)所有需求都滿足之后,確保用戶名不和數(shù)據(jù)庫中現(xiàn)有的用戶名重復(fù),如果是重復(fù)了,也是返回一個錯誤。否則,繼續(xù)驗證 email 地址,將新用戶數(shù)據(jù)庫插入數(shù)據(jù)庫,然后返回一個成功消息。

如果您確定這是一個現(xiàn)有用戶想要的登錄,確保用戶名是存在數(shù)據(jù)庫中。如果是,將用戶數(shù)據(jù)保存到一個會話中,然后返回一個成功消息。

清單 8. 與 JavaScript 代碼和數(shù)據(jù)庫交互的服務(wù)器端 PHP 代碼

// Database connection valuesdefine('DB_HOST', 'localhost');define('DB_USERNAME', 'YOUR_USERNAME');define('DB_PASSWORD', 'YOUR_PASSWORD');define('DB_NAME', 'YOUR_DB_NAME');if(isset($_POST['username'], $_POST['password'])) { extract($_POST); $db = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD); mysql_select_db(DB_NAME, $db); if($action == 'register'   && isset($_POST['firstname'], $_POST['lastname'], $_POST['email'])) { // Verify that the username is unique $query = mysql_query("select count(id)   from ibm_user_auth where username='$username'"); $result = mysql_fetch_row($query); if ( $result[0] > 0 ) {  die("<error id='0' />"); } // Validate email if( !preg_match("^[a-z0-9,!#/$%&'/*/+/=/?/^_`/{/|}~-]+(/.[a-z0-9,!#/$%&  '/*/+/=/?/^_`/{/|}~-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*/.([a-z]{2,})$^",   $_POST['email']) ) {  die("<error id='1' />"); } mysql_query("insert into ibm_user_auth   (username, password, firstname, lastname, email)   VALUES ('$username', MD5('$password'), '$firstname', '$lastname', '$email')"); die("<success />"); } else if($action == 'login') { $query = mysql_query("select count(id) from ibm_user_auth where   username='$username' and password=md5('$password')"); $result = mysql_fetch_row($query); if($result[0] == 1) {  session_start();  $_SESSION['username'] = $username;  die("<success />"); } else die("<error id='2' />"); }}?>

現(xiàn)在,您已經(jīng)完成了要點工作,考慮使用性能可能是一個好主意。該代碼最大的問題是如果出現(xiàn)錯誤不能告知用戶是什么錯誤。然而,您可能注意到了,每個錯誤響應(yīng)包含一個 id 屬性,下一節(jié)向您展示如何使用這些值來為每個場景編寫一個錯誤響應(yīng),以及在注冊過程中提示用戶名。

在注冊過程中處理錯誤和提示用戶名

此時,使用上述代碼處理錯誤是較為容易的。特別是您已經(jīng)返回錯誤,且錯誤中含有指向可能出現(xiàn)問題的具體 ID。如果您已經(jīng)構(gòu)建了 ID,那么開始添加 PHP 代碼,此代碼用于在返回到 JavaScript 代碼之前提示用戶名。清單 9 提供一個如何根據(jù)用戶提交信息創(chuàng)建用戶名暗示的示例 — 本例中是名字和姓。

清單 9. 使用提交的用戶數(shù)據(jù)創(chuàng)建用戶名提示

// Database connection valuesdefine('DB_HOST', 'localhost');define('DB_USERNAME', 'YOUR_USERNAME');define('DB_PASSWORD', 'YOUR_PASSWORD');define('DB_NAME', 'YOUR_DB_NAME');if(isset($_POST['username'], $_POST['password'])) { extract($_POST); $db = mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD); mysql_select_db(DB_NAME, $db); if($action == 'register'   && isset($_POST['firstname'], $_POST['lastname'], $_POST['email'])) { // Verify that the username is unique $query = mysql_query("select count(id)   from ibm_user_auth where username='$username'"); $result = mysql_fetch_row($query); if ( $result[0] > 0 ) {  $out = "<error id='0'><suggestions>";  $out .= "<suggestion>" . $firstname . $lastname . "</suggestion>";  $out .= "<suggestion>" . $firstname . "_" . $lastname . "</suggestion>";  $out .= "<suggestion>" . $lastname . $firstname . "</suggestion>";  $out .= "<suggestion>" . $lastname . "_" . $firstname . "</suggestion>";  $out .= "</suggestions></result>";  die($out); } // Validate email if( !preg_match("^[a-z0-9,!#/$%&'/*/+/=/?/^_`/{/|}~-]+(/.[a-z0-9,!#/$%&  '/*/+/=/?/^_`/{/|}~-]+)*@[a-z0-9-]+(/.[a-z0-9-]+)*/.([a-z]{2,})$^",   $_POST['email']) ) {  die("<error id='1' />"); } mysql_query("insert into ibm_user_auth   (username, password, firstname, lastname, email)   VALUES ('$username', MD5('$password'), '$firstname', '$lastname', '$email')"); die("<success />"); } else if($action == 'login') { $query = mysql_query("select count(id) from ibm_user_auth   where username='$username'   and password=md5('$password')"); $result = mysql_fetch_row($query); if($result[0] == 1) {  session_start();  $_SESSION['username'] = $username;  die("<success />"); } else die("<error id='2' />"); }}?>

注意,在注冊過程中如果用戶名已存在,您可以創(chuàng)建一個包含各種提交用戶名組合數(shù)據(jù)(構(gòu)成提示用戶名)的 XML 結(jié)構(gòu)。您甚至可以進一步在返回之前確認用戶名提示不在數(shù)據(jù)庫中。

使用 jQuery 顯示提示信息

清單 10. 使用 jQuery 顯示提示用戶名

$(document).ready(function() { $("#register, #login").click(function(e) { var name = ($(event.target).attr('id') == 'register') ? 'Registration' : 'Login'; $('#message').slideUp('fast'); $.post('service.php',   $('#mainform').serialize() +'&action='+ $(event.target).attr('id'),    function(data) { var code = $(data)[0].nodeName.toLowerCase(); $('#message').removeClass('error'); $('#message').removeClass('success'); $('#message').addClass(code); if(code == 'success') {  $('#message').html(name + ' was successful.'); } else if(code == 'error') {  var id = parseInt($(data).attr('id'));  switch(id) {  case 0:   $('#message').html('This user name has already been taken.     Try some of these suggestions:');   form = $(document.createElement('form'));   $(data).find('suggestions > suggestion').each(function(idx, el) {   radio = $(document.createElement('input'));   radio.attr({type: 'radio', name: 'suggested',     id: 'suggested_'+idx,     value: el.innerHTML});   lbl = $(document.createElement('label'));   lbl.attr('for', 'suggested_'+idx);   lbl.html(el.innerHTML);   form.append(radio);   form.append(lbl);   form.append('');   });  $('#message').append(form);  $('#message form input[type="radio"]').click(function() {   $('#username').val($(this).attr('value'));  });  break;  case 1:  $('#message').html('The e-mail entered is invalid.');  break;  case 2:  $('#message').html('The user name or password you entered was invalid.');  break;  default:  $('#message').html('An error occurred, please try again.');  } } $('#message').slideDown('fast'); }); return e.preventDefault(); });});

現(xiàn)在,如果返回一個錯誤,您就可以檢查錯誤 ID,而不只是顯示對用戶沒有幫助的默認錯誤消息。首先,從 XML 結(jié)構(gòu)(從 PHP 返回的)中解析 ID,然后使用一個轉(zhuǎn)換語句直接指向消息或者相關(guān)代碼。第一個錯誤 ID 是用于系統(tǒng)中已經(jīng)存在一個用戶名的情況。這就是您訪問提示用戶名和為用戶展示一個選擇新用戶名的地方。從訪問提示節(jié)點開始,遍歷每一個節(jié)點。遍歷過程中創(chuàng)建一個單選按鈕和一個包含提示的標簽,然后將它附加到錯誤消息,顯示給用戶。此時,用戶可以選擇一個提示名,該名稱將自動添加到用戶名文本框,然后繼續(xù)注冊。

接下來的錯誤 ID 是用于 email 地址驗證的。相關(guān)代碼只顯示一個常見錯誤消息,通知用戶發(fā)生了什么錯誤。您甚至可以添加一行代碼來突出顯示不正確的字段。下一個是一個常見錯誤系消息,用于登錄失敗時。在本例中,代碼使用了一個較為模糊的消息,考慮到安全原因,您不能告訴任何人那個字段是不正確的。最后,默認消息和您 清單 5 中的是一樣的,該消息可能永遠都不會使用,但是有備無患。

結(jié)束語

使用 Ajax 進行用戶認證日益普及,對于單頁面應(yīng)用程序幾乎是必不可少的。它對于提示用戶名也大有好處,正如本文所述,因為當(dāng)頁面被提交后,它給用戶一個虛幻的希望,只有出現(xiàn)錯誤時才刷新,這就是說響應(yīng)更自動化、更用戶友好。同時也提供了一個更好用的 web 體驗。

完整實例代碼點擊此處本站下載。

希望本文所述對大家jQuery程序設(shè)計有所幫助。



注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久久久久av无码免费网站下载| 国产精品国产三级国产三级人妇| 久久伊人精品视频| 精品国产av一区二区三区| 黄色网在线免费看| 久久午夜夜伦鲁鲁片| 波多野结衣与黑人| 99久久99久久精品国产片果冰| 性欧美精品一区二区三区在线播放| 中文乱码免费一区二区三区下载| 国产手机免费视频| 亚洲精品国产精品国自| 亚洲国产精品一区二区www在线| 亚洲 国产 日韩 欧美| 日韩精品视频久久| 国产 日韩 欧美 综合 一区| 精品国产一区在线| 精品亚洲国产成人av制服丝袜| 国产精品久久精品日日| 激情欧美日韩一区| 久久av最新网址| 日韩女优av电影| 精品国产一区二区三区久久久蜜臀| 欧美性猛交丰臀xxxxx网站| 欧美激情中文字幕一区二区| 天海翼一区二区| 国产成人亚洲综合91| 97超碰人人在线| 国产麻豆精品一区二区三区v视界| 免费看成人午夜电影| 国产精品福利一区二区| 国产 高清 精品 在线 a| 国产精品亲子伦av一区二区三区| 粗大的内捧猛烈进出在线视频| 亚洲一区二区自拍偷拍| 国产精品久久在线观看| 免费欧美日韩国产三级电影| 日本少妇全体裸体洗澡| 久久久久亚洲AV成人网人人小说| 男人的天堂一区二区| 在线观看av的网址| 日韩欧美成人一区二区三区| 午夜精品在线| 欧美亚洲综合久久| 成人综合社区| 欧美做受69| 日本黄色女人| 成人黄色片在线| 在线国产一区二区三区| 久久99国产精品尤物| 国产毛片久久久| 亚洲成av人影院在线观看| 丁香婷婷综合激情| 麻豆视频在线观看免费网站黄| 国产精品久久久久久久久快鸭| 91精品啪在线观看国产手机| 亚欧精品在线| 天天揉久久久久亚洲精品| 日本一区二区免费视频| 久久国产精品视频在线观看| 国产伦精品一区二区三区妓女| 欧美国产91| 亚洲第一在线视频| 亚洲欧美伊人| 国产一区精品在线| 精品少妇爆乳无码av无码专区| 国产高清大尺度一区二区不卡| 91精品亚洲| 日韩在线欧美在线国产在线| 久久久久免费| 一本一道久久a久久精品综合| 中文字幕影片免费在线观看| 久久精品国产亚洲a| 狠狠色狠狠色综合系列| 韩国日本不卡在线| av影院在线| 欧美私人网站| 日本成人一级片| 呦视频在线一区二区三区| 欧美精品播放| 久久96国产精品久久99软件| 国产亚洲精品高潮| 99精品老司机免费视频| 国产激情91久久精品导航| 日韩视频免费观看高清| 四虎成人在线播放| 日本三级很黄试看120秒| 免费在线观看视频| 日韩一级黄色片| 日本一区二区三区在线观看视频| 免费在线观看成人av| 日韩av自拍偷拍| 谁有免费的黄色网址| 不卡视频在线看| 亚洲精品乱码久久久久久动漫| ,一级淫片a看免费| 91中文字幕精品永久在线| 天堂成人国产精品一区| 老牛影视av老牛影视av| 国产精品自拍视频一区| 羞羞免费视频网站| 精品成人乱色一区二区| 国产欧亚日韩视频| 国产一区亚洲一区| 五月开心六月丁香综合色啪| 欧美在线观看视频一区| 日本福利午夜视频在线| 日本免费观看视| 亚洲色图网址| 国产毛片精品国产一区二区三区| 亚洲黄色有码视频| 亚洲欧美国产精品专区久久| 国产一区二区三区在线免费观看| 天天摸天天操天天干| 国产成人精品自线拍| 成人午夜在线影院| 91精品国产九九九久久久亚洲| 91精品电影| 亚洲理论中文字幕| 一级黄色电影片| 欧美日韩国产电影| 蜜臀久久久久久久| 国产精品一区二区三区观看| 91一区二区三区在线播放| 乱h高h女3p含苞待放| 久久中文字幕导航| 国产精品亚洲欧美| 成人国产亚洲欧美成人综合网| 国产精品久久看| 青青青免费视频在线2| 日韩精品一区国产| 少妇一级淫免费播放| 亚洲色图另类小说| 日本r级电影在线观看| 亚洲国产精品无码久久久久高潮| 色窝窝无码一区二区三区成人网站| 男人的天堂www| 欧美 日韩 国产一区| 999久久久精品一区二区| 色综合亚洲精品激情狠狠| 免费日韩在线视频| 欧美麻豆久久久久久中文| 91福利在线免费| 在免费jizzjizz在线视频| 久久九九精品| 欧美亚洲日本在线观看| 国产黄色av片| 一本色道久久加勒比精品| 91精品国产综合久久婷婷香蕉| 97人妻精品视频一区| 玖玖玖免费嫩草在线影院一区| 日本高清免费在线视频| av大片免费在线观看| 另类视频在线观看+1080p| 国产成人av一区二区三区在线| 欧美色图亚洲视频| 亚洲小说欧美另类激情| 亚洲精品传媒| 亚洲狼人综合网| 精品亚洲成av人在线观看| 黄色国产网站在线观看| 婷婷久久五月天| 麻豆91免费| 国产一区二区三区视频免费观看| 国产精品入口免费麻豆| 国产精品视频专区| 婷婷亚洲五月色综合| 精品国产午夜福利| 伊人久久综合影院| 国产精品111| 免费极品av一视觉盛宴| 免费麻豆国产一区二区三区四区| 四虎4hu永久免费入口| 色系网站成人免费| 婷婷中文字幕综合| 特级西西444www| 国产肉体xxxx裸体784大胆| 亚洲福中文字幕伊人影院| 国产精品一区二区三区av麻| 免费视频网站在线观看入口| 免费黄色av| 免费福利视频一区二区三区| 狠狠搞狠狠干| 一本久久综合亚洲鲁鲁五月天| 亚洲国产精品人久久电影| 成年人在线免费观看视频网站| 国产精品69久久久久| 69精品人人人人| 日韩视频免费| 亚洲综合123| ww亚洲ww在线观看国产| 免费国产在线视频| 美女mm1313爽爽久久久蜜臀| 一区二区三区日本视频| 欧美日韩不卡在线视频| 成人欧美精品久久久久影院| 国产精品系列在线观看| 国产91精品看黄网站在线观看| 999在线观看视频| 青青草视频播放| 青草在线视频在线观看| 巨大黑人video| 国产精品国产成人国产三级| 九色视频网址| 亚洲福利一二三区| 国产综合久久久久久鬼色| 色播在线观看| 波多野结衣视频网址| 韩国三级成人在线| 国产精品稀缺呦系列在线| 成人影院在线观看视频| 色多多在线观看| 精品亚洲夜色av98在线观看| 久热国产精品| 五月天精品一区二区三区| 欧美黑人疯狂性受xxxxx野外| 热99re久久精品这里都是免费| 欧美激情视频一区二区| 亚洲av毛片在线观看| jizz在线免费观看| 国产精品97| 四虎影视永久免费在线观看一区二区三区| 动漫视频在线一区| 调教视频在线观看| 久99久在线| 国产农村妇女aaaaa视频| 久久亚洲黄色| 久久综合久久综合久久| www.av中文字幕| 日韩美女免费线视频| 国产婷婷精品av在线| xxx国产hd| 国产电影精品久久禁18| 哺乳挤奶一区二区三区免费看| 成码无人av片在线观看网站| 男女av免费观看| 亚洲2区在线| 欧美日韩在线视频免费| 亚洲免费福利视频| 妖精视频一区二区| 不卡在线观看av| 国产成人免费观看| 欧美美女色图| 精品一区二区三区在线成人| 久久性色av| av在线亚洲色图| 北条麻妃在线一区二区| 奇米影音第四色| 欧美 亚洲 另类 激情 另类| 国产精品久久久久久久一区探花| 久久久久成人精品免费播放动漫| 亚州av综合色区无码一区| 亚洲大尺度在线观看| jizzjizzjizzjizzjizzjizzjizz| 久久毛片高清国产| 欧美精品xxx| av片哪里在线观看| 草莓福利社区在线| eeuss草民免费| 成人久久一区二区三区| 国产精品观看在线亚洲人成网| 欧美一级淫片免费视频黄| 亚洲制服丝袜在线播放| 一级一片免费播放| gogo人体一区| 夜鲁很鲁在线视频| 国产成人高潮免费观看精品| 337p日本欧洲亚洲大胆张筱雨| 亚洲欧美一区二区原创| 少妇高潮毛片色欲ava片| 夜夜添无码一区二区三区| caoporen国产精品| 欧美成人精品欧美一| 精品国产精品三级精品av网址| 美女扒开腿让男人桶爽久久软| 极品美女销魂一区二区三区| 成人羞羞视频免费| 国产日韩在线观看视频| 成年人视频免费在线播放| 色男人天堂av| 国产在线精品一区二区三区》| 亚洲资源中文字幕| 唐朝av高清盛宴| 亚洲精品理论片| 九九九国产视频| 一区二区三区91| 久久久久88色偷偷免费| 性生活黄色大片| 天天草天天操| 亚洲精品久久久久久宅男| 日韩中文综合网| 日韩欧美黄色片| 国产精品中文字幕在线观看| 成人女性文胸| 极品一线天粉嫩虎白馒头| 在线观看亚洲电影| 午夜日韩成人影院| 无码av中文一区二区三区桃花岛| 国内性生活视频| 日韩伦理在线视频| 老司机精品福利在线观看| 亚洲另类自拍| 国产精品1区| 亚洲盗摄视频| 欧美电影在线观看免费| 精品国产乱码久久久久久鸭王1| 国产精品免费一区二区三区在线观看| 国模吧无码一区二区三区| 免费成人看片网址| 欧美国产精品va在线观看| 在线免费电影观看| 3d动漫精品啪啪一区二区下载| 中文字幕人妻一区二区在线视频| 国产一区二区三区高清播放| 久久婷婷影院| 在线观看亚洲视频| 国产激情av在线| 精品人妻一区二区三区含羞草| 筱崎爱全乳无删减在线观看| 亚洲午夜免费| 国产精品av免费在线观看| 牛夜精品久久久久久久99黑人| 精品国产乱码一区二区三| 日韩欧美二区三区| 亚洲综合色站| 最新国产在线视频| 欧美午夜精品理论片| 超级碰碰视频|