站點IP訪問頻率限制 針對單個站點
using System;using System.Collections.Generic;using System.IO;//using System.Linq;using System.Web;// <summary>// IP訪問頻率控制// </summary> public static class IPCacheManager{ /// <summary> /// IP緩存集合 /// </summary> private static List<IPCacheInfo> dataList = new List<IPCacheInfo>(); private static object lockObj = new object(); /// <summary> /// 一段時間內,最大請求次數,必須大于等于1 /// </summary> private static int maxTimes = 3; /// <summary> /// 一段時間長度(單位秒),必須大于等于1 /// </summary> private static int partSecond = 30; /// <summary> /// 請求被拒絕是否加入請求次數 /// </summary> private static bool isFailAddIn = false; static IPCacheManager() { } /// <summary> /// 設置時間,默認maxTimes=3, partSecond=30 /// </summary> /// <param name="_maxTimes">最大請求次數</param> /// <param name="_partSecond">請求單位時間</param> public static void SetTime(int _maxTimes, int _partSecond) { maxTimes = _maxTimes; partSecond = _partSecond; } /// <summary> /// 檢測一段時間內,IP的請求次數是否可以繼續請求 /// 和使用 /// </summary> /// <param name="ip"></param> /// <returns></returns> public static bool CheckIsAble(string ip) { lock (lockObj) { var item = dataList.Find(p => p.IP == ip); if (item == null) { item = new IPCacheInfo(); item.IP = ip; item.ReqTime.Add(DateTime.Now); dataList.Add(item); return true; } else { if (item.ReqTime.Count > maxTimes) { item.ReqTime.RemoveAt(0); } var nowTime = DateTime.Now; if (isFailAddIn) { #region 請求被拒絕也需要加入當次請求 item.ReqTime.Add(nowTime); if (item.ReqTime.Count >= maxTimes) { if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) { return false; } else { return true; } } else { return true; } #endregion } else { #region 請求被拒絕就不需要加入當次請求了 if (item.ReqTime.Count >= maxTimes) { if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) { return false; } else { item.ReqTime.Add(nowTime); return true; } } else { item.ReqTime.Add(nowTime); return true; } #endregion } } } }}public class IPCacheInfo{ public string IP { get; set; } private List<DateTime> reqTime = new List<DateTime>(); public List<DateTime> ReqTime { get { return this.reqTime; } set { this.reqTime = value; } }}
以上這篇C# 站點IP訪問頻率限制 針對單個站點的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答