精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文徹底搞懂Cookie、Session、Token到底是什么

開發 前端
在了解這三個概念之前我們先要了解HTTP是無狀態的Web服務器,什么是無狀態呢?就像上面夏洛特煩惱中經典的一幕對話一樣,一次對話完成后下一次對話完全不知道上一次對話發生了什么。

Cookie

洛:大爺,樓上322住的是馬冬梅家吧?

大爺:馬都什么?

夏洛:馬冬梅。

大爺:什么都沒啊?

夏洛:馬冬梅啊。

大爺:馬什么沒?

夏洛:行,大爺你先涼快著吧。

在了解這三個概念之前我們先要了解HTTP是無狀態的Web服務器,什么是無狀態呢?就像上面夏洛特煩惱中經典的一幕對話一樣,一次對話完成后下一次對話完全不知道上一次對話發生了什么。如果在Web服務器中只是用來管理靜態文件還好說,對方是誰并不重要,把文件從磁盤中讀取出來發出去即可。但是隨著網絡的不斷發展,比如電商中的購物車只有記住了用戶的身份才能夠執行接下來的一系列動作。所以此時就需要我們無狀態的服務器記住一些事情。

那么Web服務器是如何記住一些事情呢?既然Web服務器記不住東西,那么我們就在外部想辦法記住,相當于服務器給每個客戶端都貼上了一個小紙條。上面記錄了服務器給我們返回的一些信息。然后服務器看到這張小紙條就知道我們是誰了。那么Cookie是誰產生的呢?Cookies是由服務器產生的。接下來我們描述一下Cookie產生的過程

  1.  瀏覽器第一次訪問服務端時,服務器此時肯定不知道他的身份,所以創建一個獨特的身份標識數據,格式為key=value,放入到Set-Cookie字段里,隨著響應報文發給瀏覽器。
  2.  瀏覽器看到有Set-Cookie字段以后就知道這是服務器給的身份標識,于是就保存起來,下次請求時會自動將此key=value值放入到Cookie字段中發給服務端。
  3.  服務端收到請求報文后,發現Cookie字段中有值,就能根據此值識別用戶的身份然后提供個性化的服務。

接下來我們用代碼演示一下服務器是如何生成,我們自己搭建一個后臺服務器,這里我用的是SpringBoot搭建的,并且寫入SpringMVC的代碼如下。 

  1. @RequestMapping("/testCookies")  
  2. public String cookies(HttpServletResponse response){  
  3.     response.addCookie(new Cookie("testUser","xxxx"));  
  4.     return "cookies";  

項目啟動以后我們輸入路徑http://localhost:8005/testCookies,然后查看發的請求。可以看到下面那張圖使我們首次訪問服務器時發送的請求,可以看到服務器返回的響應中有Set-Cookie字段。而里面的key=value值正是我們服務器中設置的值。

接下來我們再次刷新這個頁面可以看到在請求體中已經設置了Cookie字段,并且將我們的值也帶過去了。這樣服務器就能夠根據Cookie中的值記住我們的信息了。

接下來我們換一個請求呢?是不是Cookie也會帶過去呢?接下來我們輸入路徑http://localhost:8005請求。我們可以看到Cookie字段還是被帶過去了。

那么瀏覽器的Cookie是存放在哪呢?如果是使用的是Chrome瀏覽器的話,那么可以按照下面步驟。

  1.  在計算機打開Chrome
  2.  在右上角,一次點擊更多圖標->設置
  3.  在底部,點擊高級
  4.  在隱私設置和安全性下方,點擊網站設置
  5.  依次點擊Cookie->查看所有Cookie和網站數據

然后可以根據域名進行搜索所管理的Cookie數據。所以是瀏覽器替你管理了Cookie的數據,如果此時你換成了Firefox等其他的瀏覽器,因為Cookie剛才是存儲在Chrome里面的,所以服務器又蒙圈了,不知道你是誰,就會給Firefox再次貼上小紙條。

Cookie中的參數設置

說到這里,應該知道了Cookie就是服務器委托瀏覽器存儲在客戶端里的一些數據,而這些數據通常都會記錄用戶的關鍵識別信息。所以Cookie需要用一些其他的手段用來保護,防止外泄或者竊取,這些手段就是Cookie的屬性。

參數名 作用 后端設置方法
Max-Age 設置cookie的過期時間,單位為秒 cookie.setMaxAge(10)
Domain 指定了Cookie所屬的域名 cookie.setDomain("")
Path 指定了Cookie所屬的路徑 cookie.setPath("");
HttpOnly 告訴瀏覽器此Cookie只能靠瀏覽器Http協議傳輸,禁止其他方式訪問 cookie.setHttpOnly(true)
Secure 告訴瀏覽器此Cookie只能在Https安全協議中傳輸,如果是Http則禁止傳輸 cookie.setSecure(true)

下面我就簡單演示一下這幾個參數的用法及現象。

Path

設置為cookie.setPath("/testCookies"),接下來我們訪問http://localhost:8005/testCookies,我們可以看到在左邊和我們指定的路徑是一樣的,所以Cookie才在請求頭中出現,接下來我們訪問http://localhost:8005,我們發現沒有Cookie字段了,這就是Path控制的路徑。

Domain

設置為cookie.setDomain("localhost"),接下來我們訪問http://localhost:8005/testCookies我們發現下圖中左邊的是有Cookie的字段的,但是我們訪問http://172.16.42.81:8005/testCookies,看下圖的右邊可以看到沒有Cookie的字段了。這就是Domain控制的域名發送Cookie。

接下來的幾個參數就不一一演示了,相信到這里大家應該對Cookie有一些了解了。

Session

> Cookie是存儲在客戶端方,Session是存儲在服務端方,客戶端只存儲SessionId

在上面我們了解了什么是Cookie,既然瀏覽器已經通過Cookie實現了有狀態這一需求,那么為什么又來了一個Session呢?這里我們想象一下,如果將賬戶的一些信息都存入Cookie中的話,一旦信息被攔截,那么我們所有的賬戶信息都會丟失掉。所以就出現了Session,在一次會話中將重要信息保存在Session中,瀏覽器只記錄SessionId一個SessionId對應一次會話請求。

 

  1. @RequestMapping("/testSession")  
  2. @ResponseBody  
  3. public String testSession(HttpSession session){  
  4.     session.setAttribute("testSession","this is my session");  
  5.     return "testSession";  
  6.  
  7. @RequestMapping("/testGetSession")  
  8. @ResponseBody  
  9. public String testGetSession(HttpSession session){  
  10.     Object testSession = session.getAttribute("testSession");  
  11.     return String.valueOf(testSession);  

這里我們寫一個新的方法來測試Session是如何產生的,我們在請求參數中加上HttpSession session,然后再瀏覽器中輸入http://localhost:8005/testSession進行訪問可以看到在服務器的返回頭中在Cookie中生成了一個SessionId。然后瀏覽器記住此SessionId下次訪問時可以帶著此Id,然后就能根據此Id找到存儲在服務端的信息了。

此時我們訪問路徑http://localhost:8005/testGetSession,發現得到了我們上面存儲在Session中的信息。那么Session什么時候過期呢?

  •  客戶端:和Cookie過期一致,如果沒設置,默認是關了瀏覽器就沒了,即再打開瀏覽器的時候初次請求頭中是沒有SessionId了。
  •  服務端:服務端的過期是真的過期,即服務器端的Session存儲的數據結構多久不可用了,默認是30分鐘。

既然我們知道了Session是在服務端進行管理的,那么或許你們看到這有幾個疑問,Session是在在哪創建的?Session是存儲在什么數據結構中?接下來帶領大家一起看一下Session是如何被管理的。

Session的管理是在容器中被管理的,什么是容器呢?Tomcat、Jetty等都是容器。接下來我們拿最常用的Tomcat為例來看下Tomcat是如何管理Session的。在ManageBase的createSession是用來創建Session的。 

  1. @Override  
  2. public Session createSession(String sessionId) {  
  3.     //首先判斷Session數量是不是到了最大值,最大Session數可以通過參數設置  
  4.     if ((maxActiveSessions >= 0) &&  
  5.             (getActiveSessions() >= maxActiveSessions)) {  
  6.         rejectedSessions++;  
  7.         throw new TooManyActiveSessionsException(  
  8.                 sm.getString("managerBase.createSession.ise"),  
  9.                 maxActiveSessions);  
  10.     }  
  11.     // 重用或者創建一個新的Session對象,請注意在Tomcat中就是StandardSession  
  12.     // 它是HttpSession的具體實現類,而HttpSession是Servlet規范中定義的接口  
  13.     Session session = createEmptySession();  
  14.     // 初始化新Session的值  
  15.     session.setNew(true);  
  16.     session.setValid(true);  
  17.     session.setCreationTime(System.currentTimeMillis());  
  18.     // 設置Session過期時間是30分鐘  
  19.     session.setMaxInactiveInterval(getContext().getSessionTimeout() * 60);  
  20.     String id = sessionId 
  21.     if (id == null) {  
  22.         id = generateSessionId();  
  23.     }  
  24.     session.setId(id);// 這里會將Session添加到ConcurrentHashMap中  
  25.     sessionCounter++;  
  26.     //將創建時間添加到LinkedList中,并且把最先添加的時間移除  
  27.     //主要還是方便清理過期Session  
  28.     SessionTiming timing = new SessionTiming(session.getCreationTime(), 0);  
  29.     synchronized (sessionCreationTiming) { 
  30.          sessionCreationTiming.add(timing);  
  31.         sessionCreationTiming.poll(); 
  32.      }  
  33.     return session  

到此我們明白了Session是如何創建出來的,創建出來后Session會被保存到一個ConcurrentHashMap中。可以看StandardSession類。 

  1. protected Map<string, session> sessions = new ConcurrentHashMap&lt;&gt;(); 

到這里大家應該對Session有簡單的了解了。

> Session是存儲在Tomcat的容器中,所以如果后端機器是多臺的話,因此多個機器間是無法共享Session的,此時可以使用Spring提供的分布式Session的解決方案,是將Session放在了Redis中。

Token

Session是將要驗證的信息存儲在服務端,并以SessionId和數據進行對應,SessionId由客戶端存儲,在請求時將SessionId也帶過去,因此實現了狀態的對應。而Token是在服務端將用戶信息經過Base64Url編碼過后傳給在客戶端,每次用戶請求的時候都會帶上這一段信息,因此服務端拿到此信息進行解密后就知道此用戶是誰了,這個方法叫做JWT(Json Web Token)。

> Token相比較于Session的優點在于,當后端系統有多臺時,由于是客戶端訪問時直接帶著數據,因此無需做共享數據的操作。

Token的優點

  1.  簡潔:可以通過URL,POST參數或者是在HTTP頭參數發送,因為數據量小,傳輸速度也很快
  2.  自包含:由于串包含了用戶所需要的信息,避免了多次查詢數據庫
  3.  因為Token是以Json的形式保存在客戶端的,所以JWT是跨語言的
  4.  不需要在服務端保存會話信息,特別適用于分布式微服務

JWT的結構

實際的JWT大概長下面的這樣,它是一個很長的字符串,中間用.分割成三部分

JWT是有三部分組成的

Header

是一個Json對象,描述JWT的元數據,通常是下面這樣子的 

  1.  
  2.   "alg": "HS256",  
  3.   "typ": "JWT"  

上面代碼中,alg屬性表示簽名的算法(algorithm),默認是 HMAC SHA256(寫成 HS256);typ屬性表示這個令牌(token)的類型(type),JWT 令牌統一寫為JWT。 最后,將上面的 JSON 對象使用 Base64URL 算法轉成字符串。

> JWT 作為一個令牌(token),有些場合可能會放到 URL(比如 api.example.com/?token=xxx)。Base64 有三個字符+、/和=,在 URL 里面有特殊含義,所以要被替換掉:=被省略、+替換成-,/替換成_ 。這就是 Base64URL 算法。

Payload

Payload部分也是一個Json對象,用來存放實際需要傳輸的數據,JWT官方規定了下面幾個官方的字段供選用。

  •  iss (issuer):簽發人
  •  exp (expiration time):過期時間
  •  sub (subject):主題
  •  aud (audience):受眾
  •  nbf (Not Before):生效時間
  •  iat (Issued At):簽發時間
  •  jti (JWT ID):編號

當然除了官方提供的這幾個字段我們也能夠自己定義私有字段,下面就是一個例子 

  1.  
  2.   "name": "xiaoMing",  
  3.   "age": 14  

默認情況下JWT是不加密的,任何人只要在網上進行Base64解碼就可以讀到信息,所以一般不要將秘密信息放在這個部分。這個Json對象也要用Base64URL 算法轉成字符串

Signature

Signature部分是對前面的兩部分的數據進行簽名,防止數據篡改。

首先需要定義一個秘鑰,這個秘鑰只有服務器才知道,不能泄露給用戶,然后使用Header中指定的簽名算法(默認情況是HMAC SHA256),算出簽名以后將Header、Payload、Signature三部分拼成一個字符串,每個部分用.分割開來,就可以返給用戶了。

> HS256可以使用單個密鑰為給定的數據樣本創建簽名。當消息與簽名一起傳輸時,接收方可以使用相同的密鑰來驗證簽名是否與消息匹配。

 

上面我們介紹了關于JWT的一些概念,接下來如何使用呢?首先在項目中引入Jar包 

  1. compile('io.jsonwebtoken:jjwt:0.9.0') 

然后編碼如下 

  1. // 簽名算法 ,將對token進行簽名  
  2. SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;  
  3. // 通過秘鑰簽名JWT  
  4. byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("SECRET");  
  5. Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());  
  6. Map<string,object> claimsMap = new HashMap&lt;&gt;();  
  7. claimsMap.put("name","xiaoMing");  
  8. claimsMap.put("age",14);  
  9. JwtBuilder builderWithSercet = Jwts.builder()  
  10.         .setSubject("subject")  
  11.         .setIssuer("issuer")  
  12.         .addClaims(claimsMap)  
  13.         .signWith(signatureAlgorithm, signingKey);  
  14. System.out.printf(builderWithSercet.compact()); 

發現輸出的Token如下 

  1. eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzdWJqZWN0IiwiaXNzIjoiaXNzdWVyIiwibmFtZSI6InhpYW9NaW5nIiwiYWdlIjoxNH0.3KOWQ-oYvBSzslW5vgB1D-JpCwS-HkWGyWdXCP5l3Ko 

此時在網上隨便找個Base64解碼的網站就能將信息解碼出來

總結

相信大家看到這應該對Cookie、Session、Token有一定的了解了,接下來再回顧一下重要的知識點

  •  Cookie是存儲在客戶端的
  •  Session是存儲在服務端的,可以理解為一個狀態列表。擁有一個唯一會話標識SessionId。可以根據SessionId在服務端查詢到存儲的信息。
  •  Session會引發一個問題,即后端多臺機器時Session共享的問題,解決方案可以使用Spring提供的框架。
  •  Token類似一個令牌,無狀態的,服務端所需的信息被Base64編碼后放到Token中,服務器可以直接解碼出其中的數據。 

 

責任編輯:龐桂玉 來源: 中國開源
相關推薦

2019-11-06 17:30:57

cookiesessionWeb

2021-08-09 08:53:30

HTTP狀態化協議

2021-01-18 13:05:52

Serverless Serverfull FaaS

2020-10-27 10:26:03

編程開發Java

2019-11-07 10:37:36

CookieSessionToken

2019-06-11 14:45:25

2020-03-18 14:00:47

MySQL分區數據庫

2021-06-30 08:45:02

內存管理面試

2022-06-07 10:13:22

前端沙箱對象

2021-07-08 10:08:03

DvaJS前端Dva

2020-12-07 06:19:50

監控前端用戶

2021-02-28 20:53:37

Cookie存儲瀏覽器

2023-12-11 11:29:35

2024-08-08 14:57:32

2022-04-11 10:56:43

線程安全

2023-04-12 08:38:44

函數參數Context

2021-08-05 06:54:05

觀察者訂閱設計

2024-11-26 08:31:36

2020-12-18 09:36:01

JSONP跨域面試官

2023-11-23 06:50:08

括號
點贊
收藏

51CTO技術棧公眾號

久久精品成人av| 国产免费观看高清视频| 国产夫妻在线观看| 亚洲精一区二区三区| 国产亚洲精品久久| 成人高清在线观看视频| 色多多在线观看| 136国产福利精品导航| 国产亚洲精品美女久久久m| 天堂网一区二区| 欧美91精品| 亚洲午夜精品视频| 精品国产乱码久久久久夜深人妻| 电影网一区二区| 亚洲女同ⅹxx女同tv| 欧美12av| 亚洲精品综合网| 男女激情视频一区| 97在线免费观看视频| 久久精品色妇熟妇丰满人妻| 国产精品天天看天天狠| 欧美日韩精品一区视频| 国产黄页在线观看| 国产一级视频在线播放| 欧美人妖在线观看| 91精品国产综合久久精品app | 国产午夜久久| 久久久极品av| 内射毛片内射国产夫妻| 欧美黑人做爰爽爽爽| 91麻豆精品国产91久久久| 成人久久久久久久久| 伊人电影在线观看| 中文字幕一区视频| 欧美大香线蕉线伊人久久国产精品| 99久久亚洲精品日本无码| 日本sm残虐另类| 奇门遁甲1982国语版免费观看高清 | 无码人妻aⅴ一区二区三区有奶水| 女生裸体视频一区二区三区| 中文字幕亚洲综合| 91网站免费视频| 日韩精品免费一区二区三区竹菊 | 色网站免费观看| 国产精品一区二区久久精品爱涩| 国产精品丝袜视频| 国产一级片av| 日本欧美加勒比视频| 欧洲成人在线视频| 91精品国产高清一区二区三密臀| 亚洲精品黄色| 国内精品久久久久伊人av| 欧美三级免费看| 亚洲午夜精品一区二区国产| 日韩中文字幕免费看| 一本在线免费视频| 欧美一区三区| 中文字幕精品在线| 一本色道久久88| 欧美电影《轻佻寡妇》| 色偷偷av一区二区三区| 国产日产在线观看| 日韩欧美高清在线播放| 中文字幕精品一区二区精品| 亚洲色图100p| 一级毛片免费高清中文字幕久久网| 日韩亚洲在线观看| 成人欧美一区二区三区黑人一| 日韩成人a**站| 久久精品国产成人| 青娱乐国产在线| 亚洲精品一二| 国产精品第10页| 91精品国产综合久| 国产精品91一区二区| 国产精选在线观看91| 亚洲色图欧美视频| 欧美国产综合色视频| 在线国产伦理一区| 黄色在线看片| 色综合av在线| 五月天激情播播| 亚洲一区二区电影| 日韩黄在线观看| 国产馆在线观看| 国产精品v亚洲精品v日韩精品| 91av视频在线播放| 亚洲无码精品国产| 国产99久久久国产精品| 精品一区二区视频| 午夜视频成人| 亚洲成av人片在线观看无码| 天天影视综合色| 日本成人精品| 亚洲视频视频在线| 精品午夜福利视频| 日韩激情在线观看| 99国产在线| 精品视频二区| 亚洲精品国产第一综合99久久| 97超碰青青草| 亚洲热av色在线播放| 亚洲国产精品久久久久秋霞不卡| 日本欧美一区二区三区不卡视频| 欧美久久成人| 国产精品久久久久久久久久| 亚洲国产精品无码久久| 国产欧美日韩精品在线| 国产一线二线三线女| 国产经典一区| 亚洲国产小视频在线观看| 久久精品在线观看视频| 国产欧美日韩一级| 91精品国产高清久久久久久91裸体| 麻豆app在线观看| 亚洲精品国产视频| jizzzz日本| 日韩中出av| 欧美激情在线观看视频| 中文字幕第2页| 91丨九色丨尤物| 成年人视频网站免费| 久久久久黄色| 亚洲天堂色网站| 国产精品久久久免费视频| 国产乱码精品一区二区三| 日本一区视频在线播放| 僵尸再翻生在线观看| 日韩一区二区免费在线电影 | 在线亚洲a色| 久久人人爽人人爽人人片av高清| 国产精品视频一区二区三区,| 久久精品亚洲乱码伦伦中文| 九色在线视频观看| 第四色中文综合网| 久久99国产精品自在自在app| 中文亚洲av片在线观看| 国产亚洲综合性久久久影院| 日韩在线视频在线观看| 欧美顶级毛片在线播放| 性色av一区二区三区红粉影视| 99久久精品国产成人一区二区| 最新中文字幕一区二区三区 | 免费成人黄色网| 在线观看日韩av| 一级黄色av片| 欧美激情资源网| 中文字幕第80页| 国产综合久久久| 国产精品精品视频一区二区三区| 国产一区二区三区福利| 一本大道久久a久久精二百| 欧美图片第一页| 天堂午夜影视日韩欧美一区二区| 欧美理论一区二区| 亚洲va中文在线播放免费| 亚洲欧美日韩成人| 99re国产在线| 亚洲欧美在线aaa| 又黄又爽又色的视频| 欧美喷水视频| 国产欧美韩日| 中文字幕资源网在线观看免费| 亚洲精品久久久久久下一站| caoporn国产| 国产日韩精品一区二区浪潮av | 亚洲日韩中文字幕在线播放| 无码人妻一区二区三区免费| 欧美国产日韩一二三区| 三区视频在线观看| 国产综合精品| 久久99精品国产99久久| 日韩福利一区| 日韩在线视频网站| 性生活三级视频| 欧美日韩激情视频| 精品一区二区6| 国产黑丝在线一区二区三区| 青青草精品视频在线| 国产亚洲第一伦理第一区| 国产日产欧美精品| 毛片网站在线看| 亚洲日本成人网| 99热这里只有精品在线观看| 亚洲电影在线免费观看| 美女被到爽高潮视频| 国内不卡的二区三区中文字幕| 日本黄色片一级片| 欧美极品在线观看| 亚洲一区二区三区成人在线视频精品 | 我要看一级黄色大片| 一区二区在线| 欧美少妇一区| 一区中文字幕电影| 国产精品99久久久久久白浆小说 | 亚洲精品成人在线| 182在线视频| 国产在线精品免费av| 亚洲午夜无码av毛片久久| 91九色精品| 久久久久久久久久久一区 | 欧美日韩中文精品| 国产午夜精品无码| 国产精品国产三级国产普通话三级 | 国产精品欧美一区二区三区不卡| 2019中文字幕在线免费观看| 日本三级在线播放完整版| 亚洲国产精久久久久久 | 亚洲精品一区二区三区福利| 中文天堂在线资源| 欧美午夜视频在线观看| 黄色一级免费视频| 中文字幕av一区 二区| www.17c.com喷水少妇| 黄一区二区三区| 热久久精品免费视频| 在线成人欧美| 亚洲免费视频播放| 欧美丝袜激情| 美女黄毛**国产精品啪啪| 精品一区91| 国产日韩视频在线观看| 日韩影片中文字幕| 69av在线视频| 黄页在线观看免费| 久久国产精品久久久| 日韩av中文| 在线观看国产精品淫| 欧美人体大胆444www| 亚洲第一区在线| 丰满少妇高潮在线观看| 91精品国产高清一区二区三区蜜臀| 最近中文字幕av| 日本丶国产丶欧美色综合| 日韩美一区二区| 高跟丝袜欧美一区| 日韩成年人视频| 亚洲www啪成人一区二区麻豆| 久久久美女视频| 一区二区三区久久久| 日韩精品一区二区亚洲av性色| 中文字幕乱码久久午夜不卡 | 亚洲综合一二区| 日韩女优一区二区| 亚洲卡通欧美制服中文| 国产精品三区在线观看| 国产精品你懂的在线欣赏| 国产午夜精品福利视频| 欧美激情综合五月色丁香| 少妇愉情理伦三级| 日本一区二区三区国色天香 | 50一60岁老妇女毛片| 成人永久aaa| 午夜男人的天堂| 久久综合五月天婷婷伊人| 少妇按摩一区二区三区| 国产亚洲欧美在线| 国产精品久久免费观看| 国产精品网站在线播放| 三级在线观看免费大全| 亚洲免费观看高清完整版在线 | 精品欧美黑人一区二区三区| 亚洲国产精品国自产拍久久| 亚洲国产精久久久久久| 青青草免费观看免费视频在线| 亚洲深夜福利网站| av在线日韩国产精品| 久久九九免费视频| 羞羞的视频在线观看| 97婷婷涩涩精品一区| 成人福利av| 国产欧美久久一区二区| 蜜桃在线一区| 久久99精品久久久水蜜桃| 女厕嘘嘘一区二区在线播放 | 欧美日韩一级片网站| 国产熟女精品视频| 亚洲国产欧美久久| 超碰免费在线观看| 久久亚洲欧美日韩精品专区| 黄在线观看免费网站ktv| 国产精品成人免费电影| 欧美午夜在线播放| 九色91视频| 色97色成人| 日本一本中文字幕| 久久一区二区三区四区五区| 欧美性猛交xxxx乱大交91| 岛国一区二区三区| 欧美性猛交xxxx乱| 亚洲精品视频在线观看免费 | 欧美精品久久久久久久久老牛影院| 国内毛片毛片毛片毛片| 国产丝袜一区视频在线观看| 久久99精品久久| 欧美中文在线免费| 久久国产精品美女| 欧美自拍资源在线| 欧美另类综合| 欧美男女交配视频| www.亚洲精品| 欧美第一页在线观看| 色婷婷久久久综合中文字幕| www.色呦呦| 中文字幕日韩在线播放| 菠萝蜜视频在线观看www入口| 国产精品极品尤物在线观看| 国产精品久久久久久久久久白浆| 亚欧洲精品在线视频免费观看| 亚洲天堂黄色| 亚洲天堂网站在线| 国产亚洲欧美一区在线观看| 九九热精品在线观看| 欧美日韩精品是欧美日韩精品| 天天av天天翘| 欧美日韩国产999| 亚洲人体在线| 亚州欧美一区三区三区在线| 性色一区二区| 屁屁影院国产第一页| 亚洲精品免费在线| 亚洲天堂一二三| 一区二区三区亚洲| 亚洲人体影院| 国产在线一区二区三区欧美| 午夜久久黄色| a级大片免费看| 亚洲少妇最新在线视频| 中文 欧美 日韩| 一区三区二区视频| 欧美人体一区二区三区| 精品在线不卡| 99这里有精品| 星空大象在线观看免费播放| 亚洲综合无码一区二区| 99视频在线观看免费| 久久天天躁狠狠躁夜夜爽蜜月| 国产激情欧美| 一区二区精品在线观看| 另类小说视频一区二区| 99久久99久久精品免费看小说.| 色先锋久久av资源部| 青草久久伊人| 国产极品精品在线观看| 国产欧美一区二区三区精品观看| 女性女同性aⅴ免费观女性恋| 91丨九色丨国产丨porny| 精品成人免费视频| 亚洲国产一区二区三区四区| 在线手机中文字幕| 麻豆传媒一区二区| 久热国产精品| 精品丰满少妇一区二区三区| 欧美日韩免费一区二区三区| 天堂资源在线中文| 成人看片人aa| 欧美日韩亚洲一区| 国产xxxx视频| 色欧美88888久久久久久影院| 国产小视频免费在线观看| 国产99久久精品一区二区永久免费| 蜜臀91精品国产高清在线观看| 免费激情视频在线观看| 亚洲国产精品黑人久久久 | 亚洲福利视频二区| 少妇淫片在线影院| 四虎一区二区| 国产一区二三区好的| 国产精品1234区| 亚洲欧美综合另类中字| 成人午夜毛片| 男人添女人下部视频免费| av在线不卡电影| 中文字幕手机在线视频| 久久精品视频导航| 成人av动漫| 久久久久免费精品| 亚洲视频一区二区在线| 欧美特黄一级视频| 国产成人一区二区三区电影| 久久久久久美女精品| 国产高清成人久久| 在线观看欧美精品| av网址在线播放| 久久综合久久综合这里只有精品| 蜜臀久久99精品久久久久久9 | 欧美唯美清纯偷拍| 性直播体位视频在线观看| 日本黑人久久| 国产激情一区二区三区| 亚洲欧美综合另类| www.欧美三级电影.com| 国产精品久久久久久久久久白浆 | 男人天堂2024| 久久影视电视剧免费网站清宫辞电视| 久久亚洲道色| 亚洲在线观看网站| 色噜噜久久综合| 手机电影在线观看| 亚洲精品日韩在线观看|