<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      session和會(huì)話保持

      1、session的基本介紹

      session 是存儲(chǔ)在服務(wù)器端的,所以稱之為服務(wù)器端會(huì)話技術(shù)。session 能在一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中,即 HttpSession 對(duì)象。

      在WEB開發(fā)中,服務(wù)器可以為每個(gè)用戶瀏覽器創(chuàng)建一個(gè)會(huì)話對(duì)象(session對(duì)象),注意:一個(gè)瀏覽器獨(dú)占一個(gè)session對(duì)象(默認(rèn)情況下)。因此,在需要保存用戶數(shù)據(jù)時(shí),服務(wù)器程序可以把用戶數(shù)據(jù)寫到用戶瀏覽器獨(dú)占的 session 中,當(dāng)用戶使用瀏覽器訪問其它程序時(shí),其它程序可以從用戶的 session 中取出該用戶的數(shù)據(jù),為用戶服務(wù)。

      Session 代表著服務(wù)器和客戶端一次會(huì)話的過程。Session 對(duì)象存儲(chǔ)特定用戶會(huì)話所需的信息。這樣,當(dāng)用戶在應(yīng)用程序的 Web 頁之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的信息將不會(huì)丟失,而是在整個(gè)用戶會(huì)話中一直存在下去。當(dāng)客戶端關(guān)閉會(huì)話,或者 Session 超時(shí)失效時(shí)會(huì)話結(jié)束。也就是說,session 的作用是能夠讓服務(wù)器在某一用戶登錄之后,用戶進(jìn)行的所有操作都保持在同一會(huì)話之內(nèi),這樣就能夠記住用戶的狀態(tài),并且能記住用戶在這次會(huì)話中進(jìn)行的一系列操作和保存的信息。

      session 存儲(chǔ)在服務(wù)器端,session 是用來存儲(chǔ)信息的,在 cookie 里面插入的只是 session id,是識(shí)別某一 session 的唯一標(biāo)識(shí)。

       

      1.1、會(huì)話

      在程序中,會(huì)話跟蹤是很重要的事情。會(huì)話保持是負(fù)載均衡最常見的問題之一,會(huì)話保持有時(shí)候又叫做粘滯會(huì)話(Sticky Sessions)。會(huì)話保持是指在負(fù)載均衡器上的一種機(jī)制,可以識(shí)別客戶端與服務(wù)器之間交互過程的關(guān)聯(lián)性,在作負(fù)載均衡的同時(shí)還保證一系列相關(guān)聯(lián)的訪問請(qǐng)求會(huì)分配到一臺(tái)服務(wù)器上?

      瀏覽器一旦給服務(wù)器發(fā)送請(qǐng)求,會(huì)話即建立。關(guān)掉該瀏覽器則認(rèn)為會(huì)話結(jié)束,新開一個(gè)瀏覽器請(qǐng)求則認(rèn)為又是一個(gè)新的會(huì)話。

      Web應(yīng)用程序是使用HTTP協(xié)議傳輸數(shù)據(jù)的,HTTP協(xié)議是無狀態(tài)的協(xié)議,一旦數(shù)據(jù)交換完畢,客戶端與服務(wù)器端的連接就會(huì)關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接,這就意味著服務(wù)器無法從連接上跟蹤會(huì)話,通俗點(diǎn)來說下一個(gè)接口無法知道上一個(gè)接口做了什么,保存了什么信息等。比如用戶 A 將一件商品放入購物車內(nèi),當(dāng)再次將商品加入服務(wù)器(又調(diào)用了一次接口),此時(shí)已經(jīng)無法判斷該購買行為是屬于用戶 A 的會(huì)話還是用戶 B 的會(huì)話了。要跟蹤該會(huì)話,必須引入一種機(jī)制。Cookie 就是這樣的一種機(jī)制,它可以彌補(bǔ)HTTP協(xié)議無狀態(tài)的不足。在 Session 出現(xiàn)之前,基本上所有的網(wǎng)站都采用 Cookie 來跟蹤會(huì)話。

       

      1.2、什么時(shí)候需要會(huì)話保持

      比如在某些要求登錄狀態(tài)的情境下,要求客戶端和服務(wù)器之間保持一個(gè)會(huì)話(session)以記錄客戶端的各種信息。比如在大多數(shù)電子商務(wù)的應(yīng)用系統(tǒng)或者需要進(jìn)行用戶身份認(rèn)證的在線系統(tǒng)中,一個(gè)客戶與服務(wù)器經(jīng)常經(jīng)過好幾次的交互過程才能完成一筆交易或者是一個(gè)請(qǐng)求的完成。由于這幾次交互過程是密切相關(guān)的,服務(wù)器在進(jìn)行這些交互過程的某一個(gè)交互步驟時(shí)往往需要了解上一次或上幾次的交互過程處理結(jié)果,這就要求所有這些相關(guān)的交互過程都由一臺(tái)服務(wù)器完成,而不能被負(fù)載均衡器分散到不同的服務(wù)器上?否則可能出現(xiàn)異常情景:

      1)客戶端已經(jīng)輸入了正確的用戶名和口令,但進(jìn)行一些操作服務(wù)器并不知道該客戶已登錄,所以返回未登錄提示信息,客戶端反復(fù)跳到登錄頁面;
      2)用戶輸入了正確的驗(yàn)證碼,但是總提示驗(yàn)證碼錯(cuò)誤
      3)客戶端放入購物車的物品丟失,因?yàn)闆]有記住上次交互保存的信息


      因此會(huì)話保持機(jī)制的意義就在于,確保在合適的情境下,將來自相同客戶端的請(qǐng)求轉(zhuǎn)發(fā)至后端相同的服務(wù)器進(jìn)行處理。換句話說,就是將客戶端與服務(wù)器之間建立的多個(gè)連接,都發(fā)送到相同的服務(wù)器進(jìn)行處理。如果在客戶端和服務(wù)器之間部署了負(fù)載均衡設(shè)備,很有可能這多個(gè)連接會(huì)被轉(zhuǎn)發(fā)至不同的服務(wù)器進(jìn)行處理。如果服務(wù)器之間沒有會(huì)話信息的同步機(jī)制,會(huì)導(dǎo)致其他服務(wù)器無法識(shí)別用戶身份,造成用戶在和應(yīng)用系統(tǒng)發(fā)生交互時(shí)出現(xiàn)異常。

       

      1.3、基于session的會(huì)話保持實(shí)現(xiàn)

      用戶第一次請(qǐng)求服務(wù)器的時(shí)候,服務(wù)器根據(jù)用戶提交的相關(guān)信息,創(chuàng)建對(duì)應(yīng)的 Session,請(qǐng)求返回時(shí)將此 Session 的唯一標(biāo)識(shí)信息 SessionID 返回給瀏覽器,瀏覽器接收到服務(wù)器返回的 SessionID 信息后,會(huì)將此信息存入到 Cookie 中,同時(shí) Cookie 記錄此 SessionID 屬于哪個(gè)域名。

      當(dāng)用戶第二次訪問服務(wù)器的時(shí)候,請(qǐng)求會(huì)自動(dòng)判斷此域名下是否存在 Cookie 信息,如果存在自動(dòng)將 Cookie 信息也發(fā)送給服務(wù)端,服務(wù)端會(huì)從 Cookie 中獲取 SessionID,再根據(jù) SessionID 查找對(duì)應(yīng)的 Session 信息,如果沒有找到說明用戶沒有登錄或者登錄失效,如果找到 Session 證明用戶已經(jīng)登錄可執(zhí)行后面操作。SessionID 是連接 Cookie 和 Session 的一道橋梁,大部分系統(tǒng)也是根據(jù)此原理來驗(yàn)證用戶登錄狀態(tài)。

      每個(gè)用戶第一次訪問服務(wù)器后,會(huì)自動(dòng)獲得一個(gè)Session ID。如果用戶在一段時(shí)間內(nèi)沒有訪問服務(wù)器,那么Session會(huì)自動(dòng)失效,下次即使帶著上次分配的Session ID訪問,服務(wù)器也認(rèn)為這是一個(gè)新用戶,會(huì)分配新的Session ID。

       

      1.4、基于session實(shí)現(xiàn)保持登錄狀態(tài)

      在用戶登錄完成過后,我們可以給 session 里面放置一些用戶信息,這樣當(dāng)會(huì)話一直保持即瀏覽器未關(guān)閉時(shí),保存在瀏覽器端的 sessionid 將一直不變,瀏覽器每次請(qǐng)求時(shí)會(huì)把該 sessionid 發(fā)送過來,如果通過該 sessionid 拿到的 session 中有用戶信息,則表示該用戶已登錄,則允許執(zhí)行其他操作。否則如果沒拿到用戶信息,則認(rèn)為未登錄,給瀏覽器返回未登錄信息內(nèi)容,由前端控制跳轉(zhuǎn)到登錄頁。

       

      2、HttpSession對(duì)象

      HttpSession 對(duì)象是一個(gè)域?qū)ο螅梢栽谝淮螘?huì)話的多次請(qǐng)求間共享數(shù)據(jù)。  

       

      2.1、HttpSession對(duì)象的基本使用

      • 通過servl的requset對(duì)象來獲取HttpSession對(duì)象:HttpSession session = request.getSession();
      • 存儲(chǔ)數(shù)據(jù)到httpsession對(duì)象:public void setAttribute(String name, Object value);
      • 從httpsession對(duì)象獲取數(shù)據(jù):public Object getAttribute(String name);
      • 移除數(shù)據(jù):public void removeAttribute(String name)

      代碼示例:

      @WebServlet("/sessiontest01")
      public class Session01 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              HttpSession session = req.getSession();   //獲取httpsession對(duì)象
              session.setAttribute("msg", "hahaha");    //往httpsession對(duì)象存儲(chǔ)數(shù)據(jù)
          }
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
          }
      }
      @WebServlet("/sessiontest02")
      public class Session02 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              HttpSession session = req.getSession();
              Object msg = session.getAttribute("msg");   //獲取數(shù)據(jù)
              System.out.println(msg);
          }
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
          }
      }

      先訪問 sessiontest01 接口,該接口將會(huì)往session對(duì)象中存儲(chǔ)數(shù)據(jù)。然后訪問 sessiontest02 接口,我們就可以看到從  sessiontest02 接口當(dāng)中可以拿到 sessiontest01 存儲(chǔ)的數(shù)據(jù)。

       

      2.1.1、session的原理

      從上面我們可以知道,在一次會(huì)話當(dāng)中,兩個(gè)請(qǐng)求獲取到的 httpsession 對(duì)象實(shí)際上是同一個(gè)對(duì)象。那么服務(wù)器是怎么確保在一次會(huì)話范圍內(nèi),多個(gè)請(qǐng)求獲取到的session對(duì)象是同一個(gè)呢?

      事實(shí)上,服務(wù)器在第一次獲取 session 即調(diào)用 request.getSession() 的時(shí)候,服務(wù)器會(huì)創(chuàng)建一個(gè) session 對(duì)象(session 是一個(gè)集合,并且是一個(gè)map集合),并且存入服務(wù)器的 session 集合中以 sessionId 為標(biāo)識(shí)鍵,也就是說根據(jù) sessionId 即可取到對(duì)應(yīng) session 的引用。同時(shí)也會(huì)創(chuàng)建一個(gè)鍵名為 JSESSIONID 的 cookie 并且返回給瀏覽器,該 cookie 的值即為 sessionId。

      如果客戶訪問同一域的其他 Servlet,這個(gè)存儲(chǔ)著 sessionId 的 cookie 就會(huì)跟著請(qǐng)求上傳到服務(wù)器。此時(shí)如果請(qǐng)求的另一個(gè)Servlet也要使用 session,服務(wù)器會(huì)自動(dòng)檢查有沒有這個(gè)保存 sessionId 的 cookie,如果有則直接到 session 集合中取對(duì)應(yīng)的 session 引用返回給要使用的Servlet。所以說,在同一會(huì)話當(dāng)中,不管請(qǐng)求哪個(gè)Servlet,拿到的都是同一個(gè)session。

      我們這里所說的session都是基于cookie機(jī)制來實(shí)現(xiàn)的,所以可以說,session的實(shí)現(xiàn)是依賴于cookie的。

       

      比如下面,在我們第一次訪問 sessiontest02 的servlet (該servlet內(nèi)調(diào)用了request.getSession()獲取session對(duì)象)時(shí),服務(wù)器會(huì)自動(dòng)返回一個(gè)創(chuàng)建名為 JSESSIONID 的cookie的響應(yīng)頭。當(dāng)我們未關(guān)閉瀏覽器即未結(jié)束當(dāng)前會(huì)話時(shí),再次訪問該請(qǐng)求,你會(huì)發(fā)現(xiàn),此時(shí)該請(qǐng)求將不會(huì)再發(fā)送這個(gè)響應(yīng)頭回來。

      sessiontest02 的代碼:

      @WebServlet("/sessiontest02")
      public class Session02 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              //調(diào)用req.getSession()方法獲取session對(duì)象
              HttpSession session = req.getSession();
          }
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
          }
      }

      可以看到,sessiontest02 調(diào)用了 request.getSession() 來獲取 session 對(duì)象。如果該 servlet 沒有調(diào)用該方法獲取 session 對(duì)象的話,訪問該 servlet 是不會(huì)自動(dòng)創(chuàng)建名為 JSESSIONID  的 cookie 的。

       

      2.1.2、JSESSIONID的cookie的創(chuàng)建時(shí)間

      在我們創(chuàng)建會(huì)話時(shí),即調(diào)用 request.getSession() 的時(shí)候,如果瀏覽器此時(shí)并不存在名為 JSESSIONID 的cookie,服務(wù)器就會(huì)自動(dòng)創(chuàng)建一個(gè)名為 JSESSIONID 的 cookie 并返回給瀏覽器。

      注意,在訪問 html 時(shí)是不會(huì)創(chuàng)建session的,而 JSP 頁面默認(rèn)是會(huì)創(chuàng)建session的,我們也可以在JSP頁面里面關(guān)掉自動(dòng)創(chuàng)建session。

       

      2.2.2、request.getSession()方法干了什么

      request.getSession() 會(huì)去獲取請(qǐng)求頭的名為 JSESSIONID 的 cookie。如果瀏覽器此時(shí)并不存在名為 JSESSIONID 的cookie,服務(wù)器就會(huì)自動(dòng)創(chuàng)建一個(gè)名為 JSESSIONID 的 cookie 并返回給瀏覽器。如果該 cookie 已存在,則直接到 session 集合中取對(duì)應(yīng)的 session 引用返回給要使用的Servlet。所以 session 有沒有失效取決于存不存在一個(gè)名為 JSESSIONID 的 cookie ,所以其實(shí)我們可以手動(dòng)去創(chuàng)建一個(gè)名為 JSESSIONID 的 cookie ,然后手動(dòng)去設(shè)置該 cookie 的過期時(shí)間并返回給瀏覽器,這樣的話即使關(guān)閉了瀏覽器該 cookie 也不會(huì)失效,session 同樣不會(huì)失效,此時(shí)多個(gè) servlet 獲取到的 session 對(duì)象仍是同一個(gè)。

       

      3、session的過期時(shí)間

      session 的默認(rèn)失效時(shí)間為 30 分鐘。session 的過期時(shí)間是從 session 不活動(dòng)的時(shí)候開始計(jì)算,如果 session 一直活動(dòng),session就總不會(huì)過期。從該 Session 未被訪問,開始計(jì)時(shí),一旦Session被訪問,服務(wù)器端可以在每次響應(yīng)時(shí)刷新 session 的過期時(shí)間,即計(jì)時(shí)會(huì)重新清 0。只要調(diào)用 servlet 傳送了該存儲(chǔ)著 sessionid 的 cookie 則表示該 session 一直在活動(dòng),不一定要調(diào)用那種獲取或者操作了 httpsession 對(duì)象的 servlet。

      session 的默認(rèn)失效時(shí)間是由服務(wù)器進(jìn)行配置,tomcat 服務(wù)器可以在安裝目錄下的 conf/web.xml 文件下看到,如下所示:

      上面的時(shí)間單位是分鐘,如果是 -1 的話則表示永不失效。

      當(dāng)然我們也可以在項(xiàng)目中 web.xml 中配置相同的選項(xiàng)來覆蓋掉 tomcat 的配置。或者可以直接在 Java 代碼中設(shè)置 session 的過期時(shí)間:

      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              HttpSession session = req.getSession();
              session.setMaxInactiveInterval(30*60);    //以秒為單位
      }

      三種方式優(yōu)先級(jí):web容器 < web項(xiàng)目 < java代碼。

       

      另外,默認(rèn)情況下,關(guān)閉瀏覽器或者重啟服務(wù)器,session 都會(huì)失效。當(dāng)我們關(guān)閉瀏覽器再重啟,訪問服務(wù)器時(shí)服務(wù)器會(huì)重新創(chuàng)建一個(gè) session,所以默認(rèn)情況下,關(guān)閉瀏覽器 session 則失效,關(guān)閉瀏覽器則意味著會(huì)話結(jié)束。因?yàn)槟J(rèn)情況下,sessionid 是存放在一個(gè)名為JSESSIONID 的cookie下的,而 cookie 默認(rèn)情況下在瀏覽器關(guān)閉時(shí)即失效。

       

      3.1、session的鈍化和活化

      • 鈍化:當(dāng)服務(wù)器正常關(guān)閉時(shí),還存活著的session(在設(shè)置時(shí)間內(nèi)沒有銷毀) 會(huì)隨著服務(wù)器的關(guān)閉被以文件(“SESSIONS.ser”)的形式存儲(chǔ)在tomcat 的work 目錄下,這個(gè)過程叫做Session 的鈍化。
      • 活化:當(dāng)服務(wù)器再次正常開啟時(shí),服務(wù)器會(huì)找到之前的“SESSIONS.ser” 文件,從中恢復(fù)之前保存起來的Session 對(duì)象,也就是將session文件轉(zhuǎn)化為內(nèi)存中的session對(duì)象,這個(gè)過程叫做Session的活化。

      鈍化和活化的過程服務(wù)器會(huì)自動(dòng)幫我們實(shí)現(xiàn)。通過鈍化和活化,在我們正常關(guān)閉服務(wù)器后(注意,并未關(guān)閉瀏覽器),再重啟服務(wù)器,然后前端再次請(qǐng)求服務(wù)器時(shí),此時(shí)仍然能夠拿到關(guān)閉之前的 session 存儲(chǔ)的數(shù)據(jù)。服務(wù)器重啟前后給瀏覽器返回的 sessionid 并不一樣,但仍能拿到關(guān)閉之前的 session 存儲(chǔ)的數(shù)據(jù)。

      (注意,在IDEA集成開發(fā)工具里可能看不到這個(gè)效果,我們可以將項(xiàng)目放在 tomcat 的安裝目錄下就可以看到鈍化和活化的效果。)

       

      4、session的特點(diǎn)

      • session 可用于存儲(chǔ)一次會(huì)話間多次請(qǐng)求的數(shù)據(jù),session的數(shù)據(jù)保存在服務(wù)器端,存儲(chǔ)在服務(wù)器的內(nèi)存中,tomcat 的 StandardManager 類將 session 存儲(chǔ)在內(nèi)存中,也可以持久化到 file,數(shù)據(jù)庫,memcache,redis等。
      • session 可以存儲(chǔ)任意類型,任意大小的數(shù)據(jù)。使用Session時(shí),由于服務(wù)器把所有用戶的Session都存儲(chǔ)在內(nèi)存中,如果遇到內(nèi)存不足的情況,就需要把部分不活動(dòng)的Session序列化到磁盤上,但這會(huì)大大降低服務(wù)器的運(yùn)行效率。因此,放入Session的數(shù)據(jù)盡量不要太大

       

      4.1、session 和 cookie 的區(qū)別

      • 作用范圍不同,Cookie 保存在客戶端(瀏覽器),Session 保存在服務(wù)器端。
      • 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意數(shù)據(jù)類型
      • 隱私策略不同,Cookie 存儲(chǔ)在客戶端,比較容易遭到不法獲取,早期有人將用戶的登錄名和密碼存儲(chǔ)在 Cookie 中導(dǎo)致信息被竊取;Session 存儲(chǔ)在服務(wù)端,安全性相對(duì) Cookie 要好一些。
      • 存儲(chǔ)大小不同, 單個(gè) Cookie 保存的數(shù)據(jù)不能超過 4K,Session 可存儲(chǔ)數(shù)據(jù)遠(yuǎn)高于 Cookie。

       

      5、一個(gè)服務(wù)器如何根據(jù) session 來區(qū)分不同的用戶

      服務(wù)器是根據(jù) session id 來區(qū)分用戶的。當(dāng)服務(wù)器接收到用 cookie 傳過來的 session id 時(shí),服務(wù)端會(huì)通過對(duì)比自身存儲(chǔ)的 session Id 來判斷用戶之前是否存在,并返回對(duì)應(yīng)的內(nèi)容給不同用戶。

       

      6、服務(wù)器集群如何應(yīng)用session

      在使用多臺(tái)服務(wù)器構(gòu)成集群時(shí),使用Session會(huì)遇到一些額外的問題。通常,多臺(tái)服務(wù)器集群使用反向代理作為網(wǎng)站入口:

       

      如果多臺(tái)Web Server采用無狀態(tài)集群,那么反向代理總是以輪詢方式將請(qǐng)求依次轉(zhuǎn)發(fā)給每臺(tái)Web Server,這會(huì)造成一個(gè)用戶在Web Server 1存儲(chǔ)的Session信息,在Web Server 2和3上并不存在,即從Web Server 1登錄后,如果后續(xù)請(qǐng)求被轉(zhuǎn)發(fā)到Web Server 2或3,那么用戶看到的仍然是未登錄狀態(tài)。

      要解決這個(gè)問題,方案一是在所有Web Server之間進(jìn)行Session復(fù)制,但這樣會(huì)嚴(yán)重消耗網(wǎng)絡(luò)帶寬,并且,每個(gè)Web Server的內(nèi)存均存儲(chǔ)所有用戶的Session,內(nèi)存使用率很低。

      另一個(gè)方案是采用粘滯會(huì)話(Sticky Session)機(jī)制,即反向代理在轉(zhuǎn)發(fā)請(qǐng)求的時(shí)候,總是根據(jù)JSESSIONID的值判斷,相同的JSESSIONID總是轉(zhuǎn)發(fā)到固定的Web Server,但這需要反向代理的支持。

       

      posted @ 2019-12-18 18:09  wenxuehai  閱讀(7106)  評(píng)論(0)    收藏  舉報(bào)
      //右下角添加目錄
      主站蜘蛛池模板: 久久96热人妻偷产精品| 色噜噜亚洲男人的天堂| 久久人妻国产精品| 午夜射精日本三级| 看亚洲黄色不在线网占| 久久久久无码中| 不卡一区二区国产在线| 国产偷国产偷亚洲高清人| 国产成人亚洲欧美二区综合| 久久精品国产亚洲av麻豆不卡| 热久久美女精品天天吊色| 国产人妻人伦精品婷婷| 久久亚洲日本激情战少妇| 日韩精品一区二区三区人| 国产v亚洲v天堂a无码99| 国产成AV人片久青草影院| 国产日韩一区二区天美麻豆| 国产精品高潮无码毛片| 人妻丝袜无码专区视频网站 | 高清无码午夜福利视频| 亚洲中文字幕无码专区| 亚洲熟女国产熟女二区三区| 亚洲欧洲日韩国内高清| 蜜臀91精品高清国产福利| 亚洲综合在线日韩av| 国产精品久久久国产盗摄| 18禁精品一区二区三区| 久久亚洲熟女cc98cm| 亚洲成av人片不卡无码手机版| 极品少妇无套内射视频| 国产午夜福利不卡在线观看| 亚洲国产午夜精品理论片妓女| 婷婷色综合成人成人网小说| 中国性欧美videofree精品| 亚洲精品一区二区三区小| 天天做天天爱夜夜爽毛片| 亚洲精品国模一区二区| 日韩精品国产中文字幕| 国产成人精品亚洲日本语言| 亚洲欧美人成电影在线观看| 国产黄色av一区二区三区|