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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 站点IP访问频率限制 针对单个站点

發布時間:2023/12/19 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 站点IP访问频率限制 针对单个站点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0x00 前言

  寫網站的時候,或多或少會遇到,登錄,注冊等操作,有時候,為了防止別人批量進行操作,不得不做出一些限制IP的操作(當前也可以用于限制某個賬號的密碼校驗等)。

這樣的簡單限制,我們又不想對數據進行存庫(顯得過于浪費資源了)。所以就誕生了0x01中提到的,簡單IP限制類。

0x01 正文

  理論說多了,終究是理論,分享一下代碼

1 /// <summary> 2 /// IP訪問頻率控制器 3 /// </summary> 4 public class IPCacheManager 5 { 6 /// <summary> 7 /// IP緩存集合 8 /// </summary> 9 private static List<IPCacheInfo> dataList = new List<IPCacheInfo>(); 10 private static object lockObj = new object(); 11 12 /// <summary> 13 /// 一段時間內,最大請求次數,必須大于等于1 14 /// </summary> 15 private static int maxTimes = 3; 16 17 /// <summary> 18 /// 一段時間長度(單位秒),必須大于等于1 19 /// </summary> 20 private static int partSecond = 30; 21 22 /// <summary> 23 /// 請求被拒絕是否加入請求次數 24 /// </summary> 25 private static bool isFailAddIn = false; 26 27 static IPCacheManager() 28 { 29 } 30 31 /// <summary> 32 /// 設置時間,默認maxTimes=3, partSecond=30 33 /// </summary> 34 /// <param name="_maxTimes">最大請求次數</param> 35 /// <param name="_partSecond">請求單位時間</param> 36 public static void SetTime(int _maxTimes, int _partSecond) 37 { 38 maxTimes = _maxTimes; 39 partSecond = _partSecond; 40 } 41 42 /// <summary> 43 /// 檢測一段時間內,IP的請求次數是否可以繼續請求 44 /// 和使用 45 /// </summary> 46 /// <param name="ip"></param> 47 /// <returns></returns> 48 public static bool CheckIsAble(string ip) 49 { 50 lock (lockObj) 51 { 52 var item = dataList.Find(p => p.IP == ip); 53 if (item == null) 54 { 55 item = new IPCacheInfo(); 56 item.IP = ip; 57 item.ReqTime.Add(DateTime.Now); 58 dataList.Add(item); 59 60 return true; 61 } 62 else 63 { 64 if (item.ReqTime.Count > maxTimes) 65 { 66 item.ReqTime.RemoveAt(0); 67 } 68 69 var nowTime = DateTime.Now; 70 if (isFailAddIn) 71 { 72 #region 請求被拒絕也需要加入當次請求 73 item.ReqTime.Add(nowTime); 74 if (item.ReqTime.Count >= maxTimes) 75 { 76 if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) 77 { 78 return false; 79 } 80 else 81 { 82 return true; 83 } 84 } 85 else 86 { 87 return true; 88 } 89 #endregion 90 } 91 else 92 { 93 #region 請求被拒絕就不需要加入當次請求了 94 if (item.ReqTime.Count >= maxTimes) 95 { 96 if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) 97 { 98 return false; 99 } 100 else 101 { 102 item.ReqTime.Add(nowTime); 103 return true; 104 } 105 } 106 else 107 { 108 item.ReqTime.Add(nowTime); 109 return true; 110 } 111 #endregion 112 } 113 } 114 } 115 } 116 } 117 118 public class IPCacheInfo 119 { 120 public string IP { get; set; } 121 122 private List<DateTime> reqTime = new List<DateTime>(); 123 public List<DateTime> ReqTime 124 { 125 get { return this.reqTime; } 126 set { this.reqTime = value; } 127 } 128 }

所有,請求過的數據都存儲在了內存中,對小網站來說,訪問頻率本來就不高,也不需要太多控制。。。

歡迎,拍磚!點贊!

轉載于:https://www.cnblogs.com/Supperlitt/p/5438524.html

總結

以上是生活随笔為你收集整理的C# 站点IP访问频率限制 针对单个站点的全部內容,希望文章能夠幫你解決所遇到的問題。

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