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

基于MongoDB打造.Net的分布式Session子系統

開發 后端 分布式 MongoDB
Taobao有她自己的分布式session框架,.net陣營也不能落后了,在下做了個基于MongoDB的支持最多26臺MongoDB的分布式Session框架。

Taobao有她自己的分布式session框架,.net陣營也不能落后了,在下做了個基于MongoDB的支持最多26臺MongoDB的分布式Session框架。

先看看配置文件:

  1. <?xml version="1.0" encoding="utf-8" ?> 

  2. <MongoDBSession> 
  3.   <DbName>SessionDB</DbName> 
  4.   <IdentityMap Identity="A">mongodb://localhost</IdentityMap> 
  5.   <IdentityMap Identity="B">mongodb://localhost</IdentityMap> 
  6.   <IdentityMap Identity="C">mongodb://localhost</IdentityMap> 
  7.   <IdentityMap Identity="D">mongodb://localhost</IdentityMap> 
  8.   <IdentityMap Identity="E">mongodb://localhost</IdentityMap> 
  9.   <IdentityMap Identity="F">mongodb://localhost</IdentityMap> 
  10.   <IdentityMap Identity="G">mongodb://localhost</IdentityMap> 
  11.   <IdentityMap Identity="H">mongodb://localhost</IdentityMap> 
  12.   <IdentityMap Identity="I">mongodb://localhost</IdentityMap> 
  13.   <IdentityMap Identity="J">mongodb://localhost</IdentityMap> 
  14.   <IdentityMap Identity="K">mongodb://localhost</IdentityMap> 

     

  15.   <IdentityMap Identity="L">mongodb://localhost</IdentityMap> 
  16.   <IdentityMap Identity="M">mongodb://localhost</IdentityMap> 
  17.   <IdentityMap Identity="N">mongodb://localhost</IdentityMap> 
  18.   <IdentityMap Identity="O">mongodb://localhost</IdentityMap> 
  19.   <IdentityMap Identity="P">mongodb://localhost</IdentityMap> 
  20.   <IdentityMap Identity="Q">mongodb://localhost</IdentityMap> 
  21.   <IdentityMap Identity="R">mongodb://localhost</IdentityMap> 
  22.   <IdentityMap Identity="S">mongodb://localhost</IdentityMap> 
  23.   <IdentityMap Identity="T">mongodb://localhost</IdentityMap> 
  24.   <IdentityMap Identity="U">mongodb://localhost</IdentityMap> 
  25.   <IdentityMap Identity="V">mongodb://localhost</IdentityMap> 
  26.   <IdentityMap Identity="W">mongodb://localhost</IdentityMap> 
  27.   <IdentityMap Identity="X">mongodb://localhost</IdentityMap> 
  28.   <IdentityMap Identity="Y">mongodb://localhost</IdentityMap> 
  29.   <IdentityMap Identity="Z">mongodb://localhost</IdentityMap> 
  30. </MongoDBSession> 

從Identity A一直到Z,默認分成了26個Map,具體的C#應用代碼:

  1. protected void btnTest_Click(object sender, EventArgs e)  
  2.         {  
  3.             Session["A"] = DateTime.Now;  
  4.             Session["B"] = 1111111111111;  
  5.             Session["C"] = "fffffffffffffff";  
  6.         }  
  7.  
  8.         protected void btnGetSession_Click(object sender, EventArgs e)  
  9.         {  
  10.             Response.Write(Session["A"].ToString());  
  11.             Response.Write("<br />");  
  12.             Response.Write(Session["B"].ToString());  
  13.             Response.Write("<br />");  
  14.             Response.Write(Session["C"].ToString());  
  15.         }  
  16.         protected void btnAbandon_Click(object sender, EventArgs e)  
  17.         {  
  18.             Session.Abandon();  
  19.         } 

呵呵,就是普通的Session用法。

這個要配置web.config:

  1. <system.web> 
  2.     <sessionState mode="Custom" customProvider="A2DSessionProvider" sessionIDManagerType="A2DFramework.SessionService.MongoDBSessionIDManager"> 
  3.       <providers> 
  4.         <add name="A2DSessionProvider" type="A2DFramework.SessionService.MongoDBSessionStateStore"/> 
  5.       </providers> 
  6.     </sessionState> 
  7.   </system.web> 

這里會牽扯出2個類:

  1. A2DFramework.SessionService.MongoDBSessionIDManager
  2. A2DFramework.SessionService.MongoDBSessionStateStore

 MongoDBSessionIDManager

  • 自定義生成的cookie值(也就是SessionID),在這個sample中,會生成如“E.asadfalkasdfjal”這樣的SessionID,其中前綴E代表這個Session的信息會映射到哪臺MongoDB上。
  • 關鍵代碼
  1. public class MongoDBSessionIDManager : SessionIDManager  
  2.     {  
  3.         private Random rnd = new Random();  
  4.         private object oLock = new object();  
  5.  
  6.         public override string CreateSessionID(System.Web.HttpContext context)  
  7.         {  
  8.             int index = 0;  
  9.             lock(this.oLock)  
  10.             {  
  11.                 index = rnd.Next(SessionConfiguration.SessionServerIdentities.Length);  
  12.             }  
  13.             string sessionId = string.Format("{0}.{1}", SessionConfiguration.SessionServerIdentities[index], base.CreateSessionID(context));  
  14.             return sessionId;  
  15.         }  
  16.  
  17.         public override string Encode(string id)  
  18.         {  
  19.             return DESEncryptor.Encode(id, SessionConfiguration.DESKey);  
  20.         }  
  21.         public override string Decode(string id)  
  22.         {  
  23.             return DESEncryptor.Decode(id, SessionConfiguration.DESKey);  
  24.         }  
  25.  
  26.         public override bool Validate(string id)  
  27.         {  
  28.             string prefix;  
  29.             string realId;  
  30.  
  31.             if (!Helper.ParseSessionID(id, out prefix, out realId))  
  32.                 return false;  
  33.  
  34.             return base.Validate(realId);  
  35.         }  
  36.     } 

#p#

MongoDBSessionStateStore

  • 自定義Session過程中最核心的一個類,代碼如下(較多):
  1. public sealed class MongoDBSessionStateStore : SessionStateStoreProviderBase  
  2.     {  
  3.         private SessionStateSection pConfig;  
  4.         private string pApplicationName;  
  5.  
  6.         public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)  
  7.         {  
  8.             base.Initialize(name, config);  
  9.  
  10.             pApplicationName =System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath;  
  11.             System.Configuration.Configuration cfg = WebConfigurationManager.OpenWebConfiguration(pApplicationName);  
  12.             pConfig =(SessionStateSection)cfg.GetSection("system.web/sessionState");  
  13.         }  
  14.  
  15.         public override SessionStateStoreData CreateNewStoreData(System.Web.HttpContext context, int timeout)  
  16.         {  
  17.             return new SessionStateStoreData(new SessionStateItemCollection(), SessionStateUtility.GetSessionStaticObjects(context), timeout);  
  18.         }  
  19.  
  20.         public override void CreateUninitializedItem(System.Web.HttpContext context, string id, int timeout)  
  21.         {  
  22.             //insert to db  
  23.             MongoDBSessionEntity session = new MongoDBSessionEntity();  
  24.             session.ApplicationName = this.pApplicationName;  
  25.             session.SessionId = id;  
  26.             session.Created = DateTime.Now;  
  27.             session.Expires = DateTime.Now.AddMinutes(pConfig.Timeout.Minutes);  
  28.             session.LockDate = DateTime.Now;  
  29.             session.LockId = 0;  
  30.             session.Timeout = timeout;  
  31.             session.Locked = false;  
  32.             session.Flags = (int)SessionStateActions.InitializeItem;  
  33.  
  34.             MongoCollection<MongoDBSessionEntity> collection = Helper.GetMongoDBCollection(id);  
  35.             collection.Save(session);  
  36.         }  
  37.  
  38.         public override void Dispose()  
  39.         {  
  40.         }  
  41.  
  42.         public override void EndRequest(System.Web.HttpContext context)  
  43.         {  
  44.         }  
  45.  
  46.         public override SessionStateStoreData GetItem(System.Web.HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions)  
  47.         {  
  48.             return GetSessionStoreItem(false, context, id, out locked, out lockAge, out lockId, out actions);  
  49.         }  
  50.  
  51.         public override SessionStateStoreData GetItemExclusive(System.Web.HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions)  
  52.         {  
  53.             return GetSessionStoreItem(true, context, id, out locked, out lockAge, out lockId, out actions);  
  54.         }  
  55.  
  56.         public override void InitializeRequest(System.Web.HttpContext context)  
  57.         {  
  58.         }  
  59.  
  60.         public override void ReleaseItemExclusive(System.Web.HttpContext context, string id, object lockId)  
  61.         {  
  62.             //update locked=0, expired=, where lockId=?  
  63.             MongoCollection<MongoDBSessionEntity> collection = Helper.GetMongoDBCollection(id);  
  64.  
  65.             var query = Query.And(  Query.EQ("LockId"int.Parse(lockId.ToString())),  
  66.                                     Query.EQ("_id", id),   
  67.                                     Query.EQ("ApplicationName", pApplicationName));  
  68.             var update = Update.Set("Locked"false)  
  69.                                 .Set("Expires", DateTime.Now.AddMinutes(pConfig.Timeout.Minutes));  
  70.  
  71.             collection.Update(query, update);  
  72.         }  
  73.  
  74.         public override void RemoveItem(System.Web.HttpContext context, string id, object lockId, SessionStateStoreData item)  
  75.         {  
  76.             //delete where sessionId=? and lockId=? and applicationname=?  
  77.             MongoCollection<MongoDBSessionEntity> collection = Helper.GetMongoDBCollection(id);  
  78.  
  79.             var query = Query.And(Query.EQ("LockId"int.Parse(lockId.ToString())),  
  80.                                     Query.EQ("_id", id),  
  81.                                     Query.EQ("ApplicationName", pApplicationName));  
  82.             collection.Remove(query);  
  83.         }  
  84.  
  85.         public override void ResetItemTimeout(System.Web.HttpContext context, string id)  
  86.         {  
  87.             //update expire date  
  88.             MongoCollection<MongoDBSessionEntity> collection = Helper.GetMongoDBCollection(id);  
  89.  
  90.             var query = Query.And(Query.EQ("_id", id),  
  91.                                     Query.EQ("ApplicationName", pApplicationName));  
  92.             var update = Update.Set("Expires", DateTime.Now.AddMinutes(pConfig.Timeout.Minutes));  
  93.             collection.Update(query, update);  
  94.         }  
  95.  
  96.         public override void SetAndReleaseItemExclusive(System.Web.HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem)  
  97.         {  
  98.             MongoCollection<MongoDBSessionEntity> collection = Helper.GetMongoDBCollection(id);  
  99.             if (newItem)  
  100.             {  
  101.                 //delete expired items  
  102.                 var query = Query.And(Query.EQ("_id", id),  
  103.                                     Query.EQ("ApplicationName", pApplicationName),  
  104.                                     Query.LT("Expires", DateTime.Now));  
  105.  
  106.                 collection.Remove(query);  
  107.  
  108.                 //insert new item  
  109.                 MongoDBSessionEntity session = new MongoDBSessionEntity();  
  110.                 session.ApplicationName = this.pApplicationName;  
  111.                 session.SessionId = id;  
  112.                 session.Created = DateTime.Now;  
  113.                 session.Expires = DateTime.Now.AddMinutes(pConfig.Timeout.Minutes);  
  114.                 session.LockDate = DateTime.Now;  
  115.                 session.LockId = 0;  
  116.                 session.Timeout = item.Timeout;  
  117.                 session.Locked = false;  
  118.                 session.Flags = (int)SessionStateActions.None;  
  119.                 session.SessionItems = Helper.Serialize((SessionStateItemCollection)item.Items);  
  120.  
  121.                 collection.Save(session);  
  122.             }  
  123.             else 
  124.             {  
  125.                 //update item  
  126.                 var query = Query.And(Query.EQ("_id", id),  
  127.                                     Query.EQ("ApplicationName", pApplicationName),  
  128.                                     Query.EQ("LockId"int.Parse(lockId.ToString())));  
  129.                 MongoDBSessionEntity entity= collection.FindOne(query);  
  130.                 entity.Expires = DateTime.Now.AddMinutes(item.Timeout);  
  131.                 entity.SessionItems = Helper.Serialize((SessionStateItemCollection)item.Items);  
  132.                 entity.Locked = false;  
  133.                 collection.Save(entity);  
  134.             }  
  135.         }  
  136.  
  137.         public override bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback)  
  138.         {  
  139.             return false;  
  140.         }  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.         private SessionStateStoreData GetSessionStoreItem(bool lockRecord, System.Web.HttpContext context,   
  152.                                                             string id,  
  153.                                                             out bool locked,  
  154.                                                             out TimeSpan lockAge,  
  155.                                                             out object lockId,  
  156.                                                             out SessionStateActions actions)  
  157.         {  
  158.             SessionStateStoreData item = null;    
  159.             lockAge = TimeSpan.Zero;  
  160.             lockId = null;  
  161.             locked = false;  
  162.             actions = 0;  
  163.  
  164.             bool foundRecord = false;  
  165.             bool deleteData = false;  
  166.  
  167.             MongoCollection<MongoDBSessionEntity> collection = Helper.GetMongoDBCollection(id);  
  168.  
  169.             if (lockRecord)  
  170.             {   
  171.                 //update db, set locked=1, lockdate=now  
  172.                 var query1 = Query.And(Query.EQ("_id", id),  
  173.                                     Query.EQ("ApplicationName", pApplicationName),  
  174.                                     Query.EQ("Locked", MongoDB.Bson.BsonValue.Create(false)),  
  175.                                     Query.GT("Expires", DateTime.UtcNow));  
  176.  
  177.                 long count = collection.Find(query1).Count();  
  178.                 if (count == 0)  
  179.                 {  
  180.                     locked = true;  
  181.                 }  
  182.                 else 
  183.                 {  
  184.                     var update = Update.Set("Locked"true).Set("LockDate", DateTime.Now);  
  185.                     collection.Update(query1, update);  
  186.                     locked = false;  
  187.                 }  
  188.             }  
  189.             //get item by id  
  190.             var query2 = Query.And(Query.EQ("_id", id),  
  191.                                     Query.EQ("ApplicationName", pApplicationName));  
  192.             MongoDBSessionEntity entity=collection.FindOne(query2);  
  193.             if (entity != null)  
  194.             {  
  195.                 if (entity.Expires < DateTime.Now)  
  196.                 {  
  197.                     locked = false;  
  198.                     deleteData = true;  
  199.                 }  
  200.                 else 
  201.                 {  
  202.                     foundRecord = true;  
  203.                 }  
  204.             }  
  205.  
  206.             //delete item if session expired  
  207.             if (deleteData)  
  208.             {  
  209.                 var query3 = Query.And(Query.EQ("_id", id),  
  210.                                     Query.EQ("ApplicationName", pApplicationName));  
  211.                 collection.Remove(query3);  
  212.             }  
  213.  
  214.             if (!foundRecord)  
  215.                 locked = false;  
  216.  
  217.             if (foundRecord && !locked)  
  218.             {  
  219.                 if (lockId == null)  
  220.                     lockId = 0;  
  221.                 lockId = (int)lockId + 1;  
  222.  
  223.                 var query4 = Query.And(Query.EQ("_id", id),  
  224.                                     Query.EQ("ApplicationName", pApplicationName));  
  225.                 var update4 = Update.Set("LockId", (int)lockId)  
  226.                                         .Set("Flags", (int)SessionStateActions.None);  
  227.                 collection.Update(query4, update4);  
  228.  
  229.                 if (actions == SessionStateActions.InitializeItem)  
  230.                     item = CreateNewStoreData(context, pConfig.Timeout.Minutes);  
  231.                 else 
  232.                     item = Helper.Deserialize(context, entity.SessionItems, entity.Timeout);  
  233.             }  
  234.             return item;  
  235.         }  
  236.     } 

由于很多方法會用到MongoCollection,因此寫了個static公用函數,如下:

  1. public static MongoCollection<MongoDBSessionEntity> GetMongoDBCollection(string sessionId)  
  2.         {  
  3.             IPartitionResolver resolver = new MongoDBSessionPartitionResolver();  
  4.             string mongoDbConnectionString = resolver.ResolvePartition(sessionId);  
  5.  
  6.             MongoClient client = new MongoClient(mongoDbConnectionString);  
  7.             MongoServer srv = client.GetServer();  
  8.             MongoDatabase db = srv.GetDatabase(SessionConfiguration.MongoDBName);  
  9.             if (!db.CollectionExists(SessionConfiguration.MongoDBCollectionName))  
  10.                 db.CreateCollection(SessionConfiguration.MongoDBCollectionName);  
  11.  
  12.             MongoCollection<MongoDBSessionEntity> collection = db.GetCollection<MongoDBSessionEntity>(SessionConfiguration.MongoDBCollectionName);  
  13.  
  14.             return collection;  
  15.         } 

#p#

運行效果:

 

 點擊Set Session后:

點擊Get Session后:

點擊Abandon后:

 

 

 源代碼已經更新到A2D Framework中了。

原文鏈接:http://www.cnblogs.com/aarond/p/MongoSession.html

責任編輯:林師授 來源: 博客園
相關推薦

2025-05-16 08:58:47

Mongodb分布式存儲

2023-12-29 08:18:31

Session分布式系統微服務

2011-11-03 10:07:09

ASP.NET

2023-05-12 08:23:03

分布式系統網絡

2023-02-11 00:04:17

分布式系統安全

2023-05-29 14:07:00

Zuul網關系統

2015-04-21 09:39:03

javajava分布式爬蟲

2017-10-24 11:28:23

Zookeeper分布式鎖架構

2024-05-06 00:00:00

.NET分布式鎖技術

2019-07-31 08:44:27

Session共享Memcache

2021-03-08 09:56:24

存儲分布式Session

2017-10-27 08:40:44

分布式存儲剪枝系統

2023-10-26 18:10:43

分布式并行技術系統

2011-05-11 16:42:21

.NET Remoti

2017-04-13 10:51:09

Consul分布式

2022-03-08 15:24:23

BitMapRedis數據

2017-10-17 08:33:31

存儲系統分布式

2023-04-26 08:01:09

分布式編譯系統

2019-07-17 22:23:01

分布式系統負載均衡架構

2017-12-05 09:43:42

分布式系統核心
點贊
收藏

51CTO技術棧公眾號

不卡视频在线观看| 99国产**精品****| 天涯成人国产亚洲精品一区av| 精品一区二区三区国产| 久久一区二区三区视频| av中文一区| 日韩丝袜情趣美女图片| 国产精品宾馆在线精品酒店| 大片免费播放在线视频| 国产中文一区二区三区| 97久久超碰福利国产精品…| 亚洲黄色免费视频| 欧美一级大片在线视频| 精品成人国产在线观看男人呻吟| 日韩av高清在线播放| 99久久精品国产色欲| 亚洲欧美视频| 欧美人与性动交| 久久久久亚洲av无码专区桃色| 国产精品诱惑| 精品久久久国产精品999| 亚洲精品国产一区| 色婷婷av一区二区三| 久久精品国产在热久久| 国产91成人在在线播放| 日韩欧美国产成人精品免费| 青青一区二区| 欧美大胆一级视频| 在线视频日韩一区| 成人三级高清视频在线看| 国产精品久久久久一区 | 亚洲国产精品毛片| 97免费观看视频| 久久精品卡一| 午夜精品福利电影| 欧美人妻一区二区| 成人羞羞网站入口免费| 日韩精品欧美激情| 精品国产免费久久久久久婷婷| 国产精品第一国产精品| 日韩欧美在线免费观看| www.日本在线播放| 青草青在线视频| 亚洲欧美视频一区| 在线丝袜欧美日韩制服| 成人午夜在线观看视频| 99精品视频一区二区三区| 不卡视频一区二区| 国产v片在线观看| 久久成人免费日本黄色| 国产精品成人免费视频| 亚洲第一网站在线观看| 午夜亚洲伦理| 欧美亚洲国产精品| 91av在线免费视频| 国产精品日韩欧美一区| 7777精品久久久久久| 日本一级淫片色费放| 亚洲午夜久久久久久尤物 | 91九色美女在线视频| 尤物在线观看一区| 免费极品av一视觉盛宴| 日韩伦理av| 亚洲综合色区另类av| 久久久久久久久久久久久国产| 日本激情视频在线观看| 国产精品成人免费精品自在线观看 | 福利一区二区三区视频在线观看| 欧美亚洲图片小说| 少妇网站在线观看| 日韩欧国产精品一区综合无码| 欧美日韩五月天| 色免费在线视频| 爱情电影网av一区二区| 日韩欧美你懂的| 亚洲日本久久久| 思热99re视热频这里只精品 | 成人网在线视频| 国产美女三级无套内谢| 福利视频网站一区二区三区| 国产精品手机视频| 日本电影一区二区在线观看| 国产喷白浆一区二区三区| 亚洲一区二区三区色| av毛片在线播放| 亚洲成人精品一区| 日日摸日日碰夜夜爽av | 91九色在线观看| 五月婷在线视频| 国产午夜久久久久| 看全色黄大色大片| 国产盗摄在线视频网站| 一本久道久久综合中文字幕| 毛片毛片毛片毛| gogo久久日韩裸体艺术| 亚洲精品自拍视频| 你懂得在线观看| 亚洲国产导航| 国产色婷婷国产综合在线理论片a| 国产高中女学生第一次| 久久免费午夜影院| 女人床在线观看| 成人免费看视频网站| 欧美精品三级日韩久久| 国产黑丝在线观看| 欧美残忍xxxx极端| 91精品国产色综合久久不卡98| 精品国产青草久久久久96| 国产成人免费视| 日本在线观看一区二区| 日本h片在线观看| 91久久精品国产91性色tv | 黄色片中文字幕| 精品一区二区三区影院在线午夜| 国产乱码一区| 免费黄色网址在线观看| 亚洲成人综合在线| 日本中文字幕精品—区二区| 欧美亚洲tv| 欧美人与性动交a欧美精品| 天天爱天天做天天爽| 成人精品在线视频观看| 亚洲第一导航| 韩日毛片在线观看| 精品日韩欧美在线| 夫妻性生活毛片| 丝袜脚交一区二区| 精品在线视频一区二区三区| 亚洲区欧洲区| 欧美日韩三级在线| www.av欧美| 亚洲每日在线| 国产精品免费在线| 亚洲综合影视| 69p69国产精品| 微拍福利一区二区| 久久精品91| 麻豆精品传媒视频| 国产精品蜜芽在线观看| 日韩精品一区二区三区老鸭窝 | 日韩精品免费| 国产91在线播放| 日本在线一二三| 亚洲观看高清完整版在线观看| 五月天六月丁香| 婷婷六月综合| 91精品久久久久久久久久久久久久| 男女网站在线观看| 欧美性xxxxxxx| 国产一级二级在线观看| 亚洲精品男同| 久久99精品久久久久久青青日本 | 思热99re视热频这里只精品| 97在线日本国产| 色呦呦中文字幕| 夜夜亚洲天天久久| 国产人妖在线观看| 红桃视频国产精品| 国产精品一区二区你懂得| 国产黄色大片在线观看| 亚洲电影免费观看高清完整版在线观看 | 久久久久久久综合色一本| 国产精品第12页| 精品国产精品国产偷麻豆| 国产精品成人aaaaa网站| 成年人视频在线看| 欧美精选午夜久久久乱码6080| 男女男精品视频网站| 久色婷婷小香蕉久久| 国产树林野战在线播放| 亚洲一区二区电影| 久久久久免费视频| 天天干在线观看| 色久综合一二码| 妖精视频在线观看免费| 国产一区二区久久| 精品国产av无码一区二区三区| 精品视频高潮| 国产97在线视频| 91在线视频| 日韩欧美一卡二卡| 日韩欧美激情视频| 国产亚洲成av人在线观看导航| 激情视频免费网站| 国语对白精品一区二区| 久久人人97超碰人人澡爱香蕉| 一二区成人影院电影网| 久久精品夜夜夜夜夜久久| 亚洲国产精品suv| 色中色一区二区| 久草福利资源在线| 成人福利视频网站| 午夜免费精品视频| 国产精品jizz在线观看美国| 美女主播视频一区| 99热这里有精品| 91精品国产91久久| 日本成人在线播放| 日韩经典第一页| 国产精品久久久久久久久久久久久久久久 | 91精品国产色综合久久不卡电影 | 精品成人一区二区三区免费视频| 欧美日韩日日摸| 91久久国产视频| 亚洲欧洲日韩综合一区二区| 国产亚洲无码精品| 国产精品乡下勾搭老头1| 国产精品99久久免费黑人人妻| 久久久久久久久丰满| 久久亚洲高清| 欧美高清一级片| 国产精品久久av| 久草在线视频网站| 日韩中文娱乐网| 人成免费电影一二三区在线观看| 91精品黄色片免费大全| 精品视频一二三区| 亚洲国产成人高清精品| 日韩一区二区不卡视频| 欧美激情综合五月色丁香 | 中文字幕av免费专区久久| 无码人妻丰满熟妇啪啪网站| 日韩av在线发布| 97成人在线免费视频| 伊人久久大香线蕉精品组织观看| 日本不卡一区| 国产成人精品福利| 亚洲一区二区三区xxx视频| 主播大秀视频在线观看一区二区| 欧美劲爆第一页| av小次郎在线| 中文字幕亚洲无线码a| 欧美日本网站| 精品国产免费一区二区三区四区 | 337p亚洲精品色噜噜狠狠| 免费黄色网址在线| 亚洲午夜日本在线观看| 欧美特级一级片| 国产精品国产三级国产有无不卡| 黄色aaa视频| 久久综合av免费| 强迫凌虐淫辱の牝奴在线观看| 成人综合婷婷国产精品久久免费| 国产高清999| 经典三级在线一区| 亚洲天堂2018av| 日av在线不卡| 91看片在线免费观看| 老司机午夜精品视频| 日本wwww视频| 久久综合亚州| 黄色三级视频片| 日韩精品一卡二卡三卡四卡无卡| 国产福利一区视频| 秋霞av亚洲一区二区三| 五月婷婷丁香色| 韩国午夜理伦三级不卡影院| 成年网站免费在线观看| 国产一区二区按摩在线观看| 一级做a爱视频| 国产福利一区二区| 中文在线观看免费视频| 波多野结衣中文字幕一区二区三区| 麻豆精品国产传媒av| 99久久免费国产| 色婷婷av777| 久久精品亚洲精品国产欧美 | 精品一区二区三| 亚洲精品美女久久7777777| 欧美成人自拍| 无码人妻精品一区二区三区99v| 欧美激情成人在线| 国产av国片精品| 亚洲欧美日韩专区| 男女视频在线看| 精品一区二区在线看| 中国特级黄色片| 不卡一区二区三区四区| 男人舔女人下部高潮全视频| 中文字幕制服丝袜一区二区三区| 欧美一区二区三区爽爽爽| 婷婷中文字幕一区三区| 瑟瑟视频在线免费观看| 欧美一区二区三区的| 神马一区二区三区| 中文在线资源观看视频网站免费不卡| 免费av网站在线看| 久久久久久国产精品三级玉女聊斋| 国产三级电影在线播放| 国产精品视频区| 亚洲三区欧美一区国产二区| 欧美日韩一区二区三| 天天射—综合中文网| 黄页免费在线观看视频| 日本不卡一区二区三区 | 99久久免费精品国产72精品九九| 久久久久久久久四区三区| 欧美顶级大胆免费视频| 欧美精品卡一卡二| 日本特黄久久久高潮| 麻豆免费在线观看视频| 国产欧美精品日韩区二区麻豆天美| 91日韩中文字幕| 日本道免费精品一区二区三区| www.色视频| 国产一区二区精品丝袜| 欧美人与牲禽动交com| 国产精品精品视频| 999在线精品| 中文字幕精品—区二区日日骚| 在线亚洲伦理| 99久久99精品| 欧美国产激情一区二区三区蜜月 | 色婷婷精品大视频在线蜜桃视频| 国产又粗又长又大视频| 亚洲欧美日韩国产精品| 黄色小说在线播放| 国产人妖伪娘一区91| 亚洲都市激情| 国产自产在线视频| 国产做a爰片久久毛片 | 亚洲色图都市小说| 一级黄色在线观看| 亚洲精品久久久一区二区三区| 成人短视频在线观看| 日韩av电影手机在线观看| 国产欧美自拍一区| 国产精品一二三在线观看| 日本va欧美va精品发布| 国产美女免费无遮挡| 亚洲丶国产丶欧美一区二区三区| 国产免费黄色片| 中文字幕一区日韩电影| 成人福利片在线| 欧美高清一区二区| 国产精品一页| 国产黄色三级网站| 亚洲一二三专区| www.com在线观看| 久久综合伊人77777| 狠狠久久综合| 亚洲a∨一区二区三区| 天使萌一区二区三区免费观看| 中文字幕在线观看的网站| 亚洲一区二区三区爽爽爽爽爽| jizz国产视频| 欧美成人免费全部观看天天性色| 亚洲精品成a人ⅴ香蕉片| 一区二区三区四区免费视频| 秋霞国产午夜精品免费视频| 老司机福利在线观看| 欧美日韩一级二级| 精品美女在线观看视频在线观看 | 成人精品动漫一区二区三区| 丁香色欲久久久久久综合网| 国产精品综合二区| 草视频在线观看| 精品福利在线导航| 97人人在线视频| 欧美男人的天堂| 日韩精品成人一区二区三区 | 有坂深雪av一区二区精品| 国产福利第一页| 欧美日韩国产成人在线观看| 高清欧美性猛交xxxx黑人猛| 国产av麻豆mag剧集| 91蜜桃网址入口| 中文字幕 自拍偷拍| 综合136福利视频在线| 国产成人免费视频网站视频社区| 日本老太婆做爰视频| 国产成人99久久亚洲综合精品| 日韩女优在线观看| 亚洲一级黄色片| 欧美亚洲二区| 欧美性潮喷xxxxx免费视频看| 97se亚洲国产综合自在线| 看黄色一级大片| 日韩最新中文字幕电影免费看| 欧美专区一区| 国产a级一级片| 国产精品高潮呻吟| 成人久久精品人妻一区二区三区| 91精品国产九九九久久久亚洲| 国产探花在线精品一区二区| 五月天婷婷在线观看视频| 亚洲mv在线观看| 1024国产在线| 国产精品视频福利| 免费在线一区观看| 久久久久香蕉视频| 亚洲天堂av高清| av日韩一区| 免费在线观看日韩视频| 国产精品久久久久桃色tv| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 国产精品激情自拍| 国产精品xvideos88| 欧美 日韩 国产 成人 在线观看 | 国产又黄又猛的视频|