日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

白话 Session 与 Cookie:从经营杂货店开始

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白话 Session 与 Cookie:从经营杂货店开始 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Web開發里面有一個歷久不衰的議題,那就是Session與Cookie的區別。從我剛開始學程序時這一題就常出現在面試考題里,一直到現在都還是能看見這個問題。

這個問題重要嗎?

我覺得滿重要的。因為Session所代表的是「狀態」,如果沒有了狀態,一大堆功能都會失效。對于工程師來說必須去理解什么是Session,以及如何實作它,而Cookie就是這之中很重要的一環。

因此這會是一系列的文章,我稱之為Session與Cookie三部曲,會由淺入深,從不同的面向去看Session與Cookie。

這是系列文的第一篇,想用簡單白話的方式通俗地跟大家解釋什么是Session,什么又是Cookie,目標是希望沒有任何技術背景的人也能夠看懂。

要向沒有技術背景的人講這種概念性的東西,用一堆專有名詞絕對是最差勁的做法。而最好的做法通常是舉一個現實生活中很貼近的例子,藉由這種方式比較能讓毫無技術背景的讀者們去理解這到底是個什么東西。

因此,我們從經營雜貨店開始吧!

小明の雜貨店

四十歲的小明退休以后在家閑得發慌,每一天都過得毫無目標而且渾渾噩噩?!竿诵菀院蟛皇菓摕o憂無慮嗎?」小明也是這樣問自己的,但沒辦法,他深知自己的個性就是這樣,沒辦法閑下來,一定要做點事情才行。

于是,小明就用了退休金在家里附近的巷口開了間雜貨店,并且取名為:「小明の雜貨店」,是個毫無創意的名稱,但把自己的名字放在招牌上一直是他的夢想。

小明平時人緣還算不錯,在倒垃圾時會與旁邊的婆婆媽媽閑聊,說著那個誰誰誰的兒子考上了臺大,誰誰誰的女兒最近交了個男友,成為左鄰右舍八卦網絡的一部分。

不只婆婆媽媽,連年輕的那一代也對他感覺不錯,八成是因為他很識相地不會硬要跟年輕人尬聊,看到他們都只是簡單點個頭示意一下,而不是像其他人劈頭就把私事全都問了一遍。

因此在開幕那天,雜貨店好比Apple Store開幕一般(除了沒有人特地前一天就跑來排隊以外),周遭的鄰居們都跑來捧場,把整個店擠得水泄不通,單日營收甚至上看百萬。第一天就能有如此成績,可見人緣是多么重要的一件事。有人緣,有人潮;有人潮,有錢潮。

但開幕畢竟是開幕,通常都是一家商店這輩子的巔峰,除非有跳樓大拍賣(假的那種不算,例如說每天都在大拍賣的)或是周年慶,不然都很難超越了。

隨著日歷一張張被撕開,店里的生意慢慢恢復正常,還是喜歡傳統便利商店的都跑回去便利商店了,而嫌遠懶得走這么多路的則選擇雜貨店消費。

看似步上正軌的雜貨店,問題卻隨著時間慢慢浮上臺面。

臉盲癥的困擾

小明身為雜貨店的店長兼唯一的店員,所有大小事都是他一個人在處理。傳統雜貨店跟便利商店最大的差別在哪里?在于人情味。

就像是你去菜市場買菜的時候會被說帥哥或美女,或者是去買早餐的時候老板會問你:「一樣?」,你只要點個頭就行了。這些人與人之間的情感是無論信息怎么發展都無法取代的。

可是小明沒有辦法,因為他根本記不起來是同一個人。

每一個來店里的人對小明來說都是一個獨立的個體,是完全不相干的。你可能會疑惑說:「就算認不出臉,認聲音、衣服、氣味也都可以吧?」,看來你是太低估小明了。

小明不只認不出臉,他什么都認不出來。我也不知道小明到底哪里出了差錯,小明自己也不知道。但總之就是這樣,就算你每天來,每天穿著一樣的衣服,用著一樣的聲音,他都認不出來你是同一個人。

講一個例子你就知道了,有一次有個顧客結完帳以后把發票忘在柜臺,一出店門口才想起來,就立刻跑回去拿。結果小明完全沒認出來是同一個人,還以為這人是想來偷拿發票的,跟他確認過買的品項一致以后才愿意把發票還給他。

對,就是這么夸張,小明每一次結賬都是在幫一個全新的人結賬。

在生活上或許沒什么問題,反正小明無依無靠也沒朋友,自己一個人生活慣了,可是在經營雜貨店上面就有很大的問題了。除了會讓人覺得很沒有人情味以外,最大的問題就是有些顧客的需求他沒辦法處理。

有些人逛雜貨店喜歡慢慢挑慢慢選嘛,然后有些物品可能又很重,或者是在結賬的時候才突然想起來還要買什么,這時候就會把東西先放在收銀臺那里,自己跑回去拿其他品項。

我前面已經提過了,小明認人的能力是零,當客人拿新的物品回去收銀臺的時候,小明已經認不出他來了。因此他不知道收銀臺上面那些物品是誰的,客人也很難跟小明證明說:「對,這些是我剛剛想買的」。

這個使用者體驗簡直差到不行,因此店里的生意每況愈下,只有那種果斷型顧客會來消費(一進雜貨店就往自己的目標走,拿完之后立刻結賬的那種)。

小明當然注意到了這個狀況,也知道不能再這樣下去了,繼續這樣的話大概不用兩個月店就會倒了。于是小明左思右想,快思慢想,東想西想,終于想到了一個解決方法。

方法雖老舊但有用

前面有提到過小明最大的問題是「每個客人都是新的客人」,他沒辦法認出他們是同一個客人,所以自然也無法記住他們的「狀態」,而這個才是最大的問題。

山不轉路轉,路不轉頭轉,既然小明自己沒辦法記住狀態,寫張紙條不就得了嗎?當你在收銀臺結賬的時候寫一張紙條給你,上面寫著:「五香乖乖x1、義美鮮奶茶x1」,然后你就可以回去挑其他你想要的東西,當你再回來收銀臺的時候把這張紙條給小明,小明就知道這些東西是你的。

或者你是個???#xff0c;每次來都買一樣的東西,小明就在結賬時寫給你一張紙條,把你常買的東西全都寫上去,這樣下次結賬時你只要帶那一張紙條過來,小明就知道你常買什么了!

你有看過那種凄美愛情電影嗎?男女主角其中一方得了罕見疾病,每天都會徹底失憶一次,另一方就會在家里幫他寫滿便條紙,透過那些便條紙,主角才能知道自己是誰、對方是誰,以及自己到底發生了什么事。

對,你可以把小明想像成就是失憶的那個,而便條紙就是給客人的紙條。既然自己記不住,就讓這些紙條代勞,把狀態放在上面。

雖然說客人要把紙條留著其實滿不方便的,但前面說過小明人緣其實不錯,因此??投紩丛谒拿孀由习鸭垪l帶著,讓這個機制得以繼續運作。而小明店里的生意也因此好轉一點點。

對,只有一點點而已,因為隨身攜帶一張紙條實在是太麻煩了,所以也沒多少人會這樣做。

再繼續往下講之前,我們先進入中場休息。

中場休息

讓我們先從比喻回到網絡世界里,HTTP是無狀態的,所以每一個Request都是不相關的,就像是對小明來說每一位客人都是新的客人一樣,他根本不知道誰是誰。既然你沒辦法把他們關連,就代表狀態這件事情也不存在。

?

把左邊換成顧客,右邊換成小明也依然成立。多一個得是我多打了,但我懶得得修。

那怎么辦呢?

在故事里我們用紙條來解決這件事情,小明會在結賬時寫下紙條并遞給客人,客人下次只要再帶著紙條過來,小明就知道發生什么事了。

?

小紙條功不可沒

小明最大的問題就是他自己沒辦法記憶「狀態」,因此需要倚靠一個機制來幫他管理「狀態」,而這個機制我們就叫做Session。

原本對小明來說,每一個客人都是新的客人,彼此之間毫無關聯,所以也沒有任何狀態可言。但有了紙條以后,兩個在小明眼中完全不同的客人被關聯了起來,小明就可以知道:「原來這個新的客人是以前那個來買木材的客人!」

所以Session是什么?就是一種讓Request變成stateful的機制。以小明的例子來說,Session就是一種讓客人之間能互相關聯起來的機制。

小明靠紙條來實作Session機制,那在網絡世界中可以靠什么呢?

舉一個最簡單的例子,網址!

讓我們假設有個購物網站的網址是:market.tw,當你把蘋果加入購物車的時候,你其實是送一個Request給服務器,然后服務器會把你導到market.tw?item1=apple,接著你再把火山硅肺病加入購物車,網址就會變成:market.tw?item1=apple&item2=pneumonoultramicroscopicsilicovolcanoconiosis

最后你按下結賬,服務器就靠著你地址欄上的信息來判斷你的狀態是什么,在這個例子中就等同于看你的購物車里面有什么。

?

簡單來說呢,地址欄上的信息就是小明故事中的紙條,是儲存狀態的地方。而上述例子Client與Server透過地址欄上的狀態來實作Session機制。

好,中場休息差不多到這邊要結束了。這一段是想先拉回網絡的部分,從原本故事中的比喻切回真實世界網絡的運作模式,以及先讓大家理解Session到底是個什么東西。

在接下來的故事里面,小明會碰到更多更多的問題,他能迎刃而解嗎?讓我們繼續看下去。

到底誰會隨身攜帶紙條?

前面已經有提過了,盡管小明靠著這個紙條的機制留住了一些常客,但是新客人呢?有多少人會愿意為了再來這間店而特地留下具有狀態的紙條?

基本上沒有,因為這樣子太麻煩了!

有天小明在快要入眠時,忽有一龐然大物拔山倒樹而來,蓋一靈感也。他想到了一個絕妙的idea:「不會有人隨身攜帶紙條,但總會隨身攜帶手機吧!」

于是流程就變成這樣子:

1、?客人來店里消費,小明結賬時請他拿出手機,并在手機里面留了一些信息

2、?客人第二次來店里,小明看看手機里有沒有之前自己留下的信息

先不用管到底小明把信息放在手機的哪里,這不是重點;重點是手機里的信息取代了以前的紙條,客人不用刻意再帶一個沒有用的紙條了,只需要把本來就會隨身攜帶的手機拿出來就好,跟以前相比方便許多。

好,接下來我們終于要講到標題的第二個東西了:Cookie。

Cookie是什么?Cookie就是故事里面存在手機的信息。

想要知道真正使用Cookie的流程,你只要把上面的客人用「瀏覽器」來取代,小明用「服務器」來取代,就是答案了:

1、?瀏覽器發送一個Request給Server,Server叫瀏覽器設置Cookie,瀏覽器便把這些數據存在Cookie里面。

2、?瀏覽器帶著Cookie一起發Request給Server,Server根據Cookie的內容決定狀態

?

這次沒有買火山硅肺病了

雖然在現實生活中不是每個人都會隨身攜帶手機,但是每個瀏覽器都會把Cookie一并帶上去,也會按照Server的指令來儲存Cookie。

你可以把Cookie稱作是一個機制,Server可以利用Set-Cookie這個語法讓瀏覽器儲存一些內容,而這些內容會在瀏覽器發送Request時一并送上來。

而瀏覽器里儲存的那些內容也叫做Cookie,就是我們故事中所提的小紙條或者是存在手機里的信息。

前面有提過Session機制可以只靠地址欄實作,跟Cookie可以一點關系都沒有。但在實際應用上,Session之所以常常跟Cookie綁在一起,就是因為靠Cookie來實作Session機制的話非常方便。

或者應該這樣說,Cookie本來就是為了實作Session而生的。藉由標準化的規范,制定了一個專門用來讓瀏覽器與Server交換數據的機制,如果用故事來比喻,就好比政府制定說每個人隨身一定要攜帶手機,然后手機里面一定要存小明留下來的狀態。

這邊再來做個簡單的總結。

Session是什么?就是一種讓Request變成stateful的機制。以小明的例子來說,Session就是一種讓客人之間能互相關聯起來的機制。在故事里面我們用了紙條跟手機里的信息來比喻,有多種方式可以達成Session。

在網絡世界中,也有很多種方式可以來實作Session,前面介紹過第一種是地址欄,第二種就是靠Cookie。而Cookie就是存在瀏覽器里的一些信息。

講到這邊,差不多就把Session與Cookie的定義與介紹講完了,但故事還沒完呢,我們還有最后一個問題要來解決。

咖啡寄杯的煩惱

雖然店里生意還可以,但小明無時無刻不想著怎么樣發大財賺大錢,讓店里的生意變得更好。他觀察到最近好多便利商店開始賣起了咖啡,而且時不時就買一送一或是第二件半價,并且貼心地提供了寄杯的服務。

寄杯就是指說你今天先喝一杯,剩下那杯我幫你記著,你下次來的時候跟我講我再給你。如果不提供這種服務,那買一送一就一定要兩個人才能喝了(或是你立刻喝兩杯),根本就是排擠像小明這樣的邊緣人。秉持著將心比心的原則,小明當然是希望提供寄杯服務的。

那該怎么寄呢?

照之前那樣不就得了嗎?原本客人的手機里面會存著消費習慣之類的東西,現在多存一個還有幾杯咖啡不就行了?例如說客人買兩杯只喝一杯,就在上面寫著:coffee=1,代表還剩一杯咖啡,下次來的時候只要出示這個信息,就再給他一杯。

聽起來十分合理,而且小明也這樣做了,店里的生意變得更好,買咖啡的人愈來愈多,靠著咖啡就讓單月營收翻了兩倍。

一切看似非常順利,直到小明月底對帳的時候。

不對啊,為什么買咖啡的數量只有55杯,賣出去的卻有66杯?

一向很相信人的小明,在那一瞬間見識到了人心的險惡之處。沒錯,有人自己偷改信息,例如說把coffee=1加個幾劃改成coffee=7,就獲得了額外六杯的免費咖啡。

這些奧步讓小明狠狠一夜之間變成了大人,絕望的小明把悲憤轉化成力量,只花了三個晚上就想到了兩個解決方法。

第一個方法最簡單,就是只要把存在客人手機上的信息加密就好了。例如說原本是coffee=1,經過小明自制的特殊加密算法之后,會變成ED85B89167A84B631C10B046B5FB7FC0這串只有小明知道怎么解開的密文。這樣一來,除非客人可以破解這段密碼,否則信息就不可能被竄改。

但有一個小缺點,那就是當小明想存的信息愈來愈多之后,這一串字也會愈來愈長,就會在客人的手機里面占更大的容量。這個容量是有上限的,客人不會把整臺手機都給你存這些信息,所以這點要特別注意。

這個方法解決問題的思路是這樣的:「既然存在手機上的信息會被竄改,那我讓他不能改就好」。

而第二個方法解決問題的思路是這樣的:「既然存在手機上的信息會被竄改,那我把信息存在我這邊不就好了嗎?」

與其把那些消費習慣或是寄杯數量存在客人的手機里,不如把這些東西記在我的筆記本里面,并且用一種方式把這兩個信息對應起來,這樣就不怕數據會被改動了。

舉例來說,小明可以在筆記本寫下客人的身份證字號跟相關資訊,例如說:「A111111111 coffee=1」,接著小明只在客人的手機里面存「A111111111」,下次客人再來消費的時候,就透過身份證字號去筆記本里面查,就知道客人到底還剩幾杯咖啡了。

由于小明的筆記本每天下班都會鎖在保險箱里面,因此不用害怕被偷或是被改,可以假設它一定是準確的。而這樣子的方式不把主要信息存在客人那里,而是存在自己這里,所以也不會有被竄改的風險。

可是有個問題,如果有人把身份證字號改成其他人的怎么辦?那不就破功了嗎?就可以偽造其他人的身份。

這個簡單,不如不要用身份證字號,用一個16位數的英數字混合亂碼好了,例如說:A59Uhe7I94J330mN,這樣就很難被猜到了吧!

于是流程會變成這樣:

客人那邊只需要報 ID 即可,其他資訊都在小明那裡

跟之前一樣,他們都是透過一張紙條或者是手機里的信息來溝通,但唯一的差別是客人跟小明之間只透過A59Uhe7I94J330mN這個存在手機里的ID來驗證身份,其他相關資訊都寫在小明的筆記本里面。

這種驗證的方法就像是我曾經去過的網咖。因為會員打咖比較便宜嘛,一小60變成一小36,不辦白不辦,就辦了一張會員卡。店員特別說明認卡不認人,一定要出示卡片才行。

我只要去打咖的時候出示這張會員卡,店員就知道我曾經消費過多少錢,也知道我喜歡點的餐點,所有的信息都是存在他們的系統里面,而我的身份就是透過這張會員卡來表示。

寄杯的例子中,會員卡就是A59Uhe7I94J330mN這個ID,網咖的電腦系統就是小明的筆記本。

小明最后決定用第二種方法,也就是這種靠ID認人的方式來管理客人的狀態。從此之后就沒有客人能夠竄改信息了,而寄杯服務也運行的十分順利,真是皆大歡喜,可喜可賀。

至于后來變得生意太好,讓小明開了分店以后碰到的那些問題,就又是另外一段故事了。

儲存狀態的方式

小明的故事說完了,該來把上面這一段變成網絡的實際案例了。

其實在網絡世界中問題也是一樣的。前面已經提到過我們會把狀態存在Cookie里面,讓Request之間能夠變得有關聯。假設我們今天要來做一個會員系統,那我要怎么知道這個Request代表的是哪一個會員?

最直覺的方式就是登入以后把會員帳號存在Cookie里面嘛,這樣不就知道是誰了嗎?可是會碰到的問題就跟寄杯的故事一樣,Cookie里的東西是可以被竄改的,如果我改成了別人的會員帳號,我就可以偽造他的身份登入了!

解決方法跟上面寄杯的解法一樣。

第一個解法就是把Cookie里面的內容給加密,這樣就無法被竄改了。這種方式就稱之為Cookie-based session,意思就是你把所有的Session狀態都存在Cookie里面。

所以不要把「用Cookie來實作Session機制」跟「Cookie-based session」搞混了,兩者是不一樣的。

至于缺點的話前面有提到,Cookie的大小是有限制的,超過大小的話瀏覽器就不幫你存了。因此當你想存的信息越來越多,Cookie當然也越來越大,就有可能超過這個限制?;蛘呤悄奶炷愕募用芊绞揭约懊荑€被黑客破解,那黑客一樣可以偽造任何人的身份。

第二個解法就是透過一個ID來辨識身份,這個ID稱之為Session Identifier,簡稱Session ID。Server只在Cookie里面存一個Session ID,其余的狀態都存在Server那邊,我習慣把Server那邊的數據稱為Session Data:

其實就是小明筆記本的翻版而已

SessionID的產生方式跟前面說的一樣,通常會是一個無法猜測的隨機數。你可能會想說:「很難猜是一回事,但機率不是0阿!」,對,的確是有機率能夠猜到,但是那個機率太低太低了(例如說幾千億分之一之類的)。而且Server在你亂猜猜錯幾次之后就有可能把你ban掉不讓你繼續猜,所以沒什么問題。

不過這邊要特別注意的一點是SessionID基本上是種認證不認人的方式,也就是說一但你的SessionID被偷走,別人就可以偽造你的身份來登入了。而這個SessionID通常都是保存在Cookie之中。

這就是為什么有些網站發生駭客入侵的情形之后你會突然被注銷,因為黑客可能偷到一批SessionID,這時候服務器就會把所有Session數據全部清空,以故事來比喻就是把筆記本丟掉,買一本新的,這樣被偷走的那些SessionID就沒用了,而Server找不到你的SessionID,自然就無法登入,因此把你給注銷了。

網站發生問題時客服會要你先把Cookie清掉也是類似的道理,因為Cookie跟狀態有關,有時候可能程序有一些bug,把你導到了錯誤的狀態,把Cookie清空等于把狀態清空,重新再開始,就有可能變得正常。

總結

其實我原本以為我很懂Cookie跟Session,但越研究越發現好像不是這么一回事,只是我自我感覺良好而已。但把該看的數據都看完一遍之后,再讓自己沉淀個幾天,大致上就能完全理解整個脈絡的發展。

Session是什么?就是一種讓Request變成stateful的機制。以小明的例子來說,Session就是一種讓客人之間能互相關聯起來的機制。在故事里面我們用了紙條跟手機里的信息來比喻,有多種方式可以達成Session。

在網絡世界中,也有很多種方式可以來實作Session,前面介紹過第一種是地址欄,第二種就是靠Cookie,而Cookie就是存在瀏覽器里的一些信息。常見的錯誤認知是一定要有Cookie才能實作Session,這是錯誤的。

有了Session之后,會碰到數據被竄改的問題,這時候有兩種解決方式,一個是Cookie-based session,意思是你照舊把狀態存在Cookie,但是加密以后再存;另一個方法是把狀態存在Server端,靠一個SessionID來辨識,這個狀態你可以存成檔案,可以存在內存里,也可以存在數據庫,只是實作方式的不同而已,但原理都是一樣的。

而這個狀態儲存的地方在口語上也會被稱之為「Session」,例如說:「幫我把user id存在session里」,或者是「注銷記得把session清空」之類的,所以在實際用法中,我認為session之所以不好理解是因為太多地方用到同一個詞,但卻是在指涉不同的東西(可是又很類似)。跟API有點像,太多地方都用到這個詞了。

總結

以上是生活随笔為你收集整理的白话 Session 与 Cookie:从经营杂货店开始的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av色欲无码人妻中文字幕 | 日韩成人精品在线 | 九色精品视频 | 岛国av中文字幕 | 一区二区三区免费毛片 | 日本一区二区三区视频免费看 | 亚洲乱码国产乱码精品天美传媒 | 婷婷激情小说 | 青娱乐精品视频 | 亚洲国产精品久久久久久6q | 伊人院 | 欧美三级欧美一级 | 91传媒视频在线观看 | 国产ts在线播放 | a猛片 | 一级片在线免费 | 伊人久久久久久久久久久久久 | 日本久久久久 | 亚洲第一页在线观看 | 91精品久久人妻一区二区夜夜夜 | 亚洲永久精品国产 | 无码人妻久久一区二区三区不卡 | 久久精品福利视频 | 一区二区三区视频观看 | 成人tiktok黄短视频 | 九九在线观看视频 | 亚洲一区区 | 美女一二三区 | 能看的黄色网址 | 91亚洲一线产区二线产区 | 精品视频站长推荐 | 射进来av影视 | 成人性生交大片免费 | 国产精品无码一区二区无人区多人 | 亚洲精品91在线 | 国产精品一区在线 | 天天干网址 | 欧美 日韩 高清 | 日本网站在线播放 | 午夜两性视频 | 九九视频免费看 | 日韩av片在线 | 亚洲精品字幕在线观看 | 正在播放超嫩在线播放 | 国产综合久久久 | 欧美裸体女人 | 一区二区三区视频免费观看 | 性无码专区无码 | 欧美性猛交99久久久久99按摩 | 日韩一区二区三区免费在线观看 | 中文在线永久免费观看 | 在线观看欧美日韩 | 小sao货水好多真紧h无码视频 | 狠狠爱亚洲 | 欧美一区二区免费视频 | 色吧视频 | 亚洲区一区二 | 青青国产视频 | 日韩欧美在线免费 | 天天色综合1 | 女儿的朋友在线播放 | 激情图片区 | 国产一区二区 | 午夜不卡影院 | 捆绑japanhdxxxxvideos | 亚洲av成人精品午夜一区二区 | 成人欧美一区二区三区在线播放 | 女同一区二区三区 | 国产精品一区二区久久 | 蜜桃一二三区 | 中文字幕一区二区免费 | 老妇裸体性猛交视频 | 久久综合中文字幕 | 国产精品1 | av观看在线免费 | 性生活视频在线播放 | 精品在线免费播放 | 日本不卡一区二区三区在线观看 | 日韩免费三级 | 国产情侣一区二区三区 | 亚洲图片自拍偷拍区 | 欧洲久久精品 | 亚洲aav| 无码人妻精品一区二区三区不卡 | 永久免费成人代码 | 中文字幕十一区 | 最近免费中文字幕 | 天堂婷婷 | 人妻熟女一区 | 91麻豆视频网站 | 欧美第九页| 色四虎 | 六月丁香婷婷综合 | 少妇高潮毛片色欲ava片 | 图书馆的女友动漫在线观看 | 国产大片b站 | 国产高清在线观看 | 成熟丰满熟妇高潮xxxxx视频 | 尤物视频最新网址 |