最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# 站點IP訪問頻率限制 針對單個站點的實現(xiàn)方法

 更新時間:2016年12月02日 09:15:39   投稿:jingxian  
下面小編就為大家?guī)硪黄狢# 站點IP訪問頻率限制 針對單個站點的實現(xiàn)方法。小編覺的挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

 站點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> 
  /// 一段時間內(nèi),最大請求次數(shù),必須大于等于1 
  /// </summary> 
  private static int maxTimes = 3;

  /// <summary> 
  /// 一段時間長度(單位秒),必須大于等于1 
  /// </summary> 
  private static int partSecond = 30;

  /// <summary> 
  /// 請求被拒絕是否加入請求次數(shù) 
  /// </summary> 
  private static bool isFailAddIn = false;

  static IPCacheManager()
  {
  }

  /// <summary> 
  /// 設置時間,默認maxTimes=3, partSecond=30 
  /// </summary> 
  /// <param name="_maxTimes">最大請求次數(shù)</param> 
  /// <param name="_partSecond">請求單位時間</param> 
  public static void SetTime(int _maxTimes, int _partSecond)
  {
    maxTimes = _maxTimes;
    partSecond = _partSecond;
  }

  /// <summary> 
  /// 檢測一段時間內(nèi),IP的請求次數(shù)是否可以繼續(xù)請求 
  /// 和使用 
  /// </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訪問頻率限制 針對單個站點的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C#比較兩個List集合內(nèi)容是否相同的幾種方法

    C#比較兩個List集合內(nèi)容是否相同的幾種方法

    本文詳細介紹了在C#中比較兩個List集合內(nèi)容是否相同的方法,包括非自定義類和自定義類的元素比較,對于非自定義類,可以使用SequenceEqual、排序后比較或HashSet來忽略重復元素,對于自定義類,需要重寫Equals和GetHashCode方法,然后使用相應的比較方法
    2025-02-02
  • Unity3D使用鼠標旋轉(zhuǎn)縮放平移視角

    Unity3D使用鼠標旋轉(zhuǎn)縮放平移視角

    這篇文章主要為大家詳細介紹了Unity3D使用鼠標旋轉(zhuǎn)縮放平移視角,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • C#中Equals方法的常見誤解

    C#中Equals方法的常見誤解

    equals方法被用來檢測兩個對象是否相等,即兩個對象的內(nèi)容是否相等。本文主要介紹的是equals方法,初學者對它幾個常見的誤解,一起來看。
    2015-10-10
  • 淺談C#網(wǎng)絡編程詳解篇

    淺談C#網(wǎng)絡編程詳解篇

    在現(xiàn)今軟件開發(fā)中,網(wǎng)絡編程是非常重要的一部分,本文簡要介紹下網(wǎng)絡編程的概念和實踐,需要的朋友可以參考下
    2017-01-01
  • C#中結(jié)構(gòu)體定義并轉(zhuǎn)換字節(jié)數(shù)組詳解

    C#中結(jié)構(gòu)體定義并轉(zhuǎn)換字節(jié)數(shù)組詳解

    在寫C#TCP通信程序時,發(fā)送數(shù)據(jù)時,只能發(fā)送byte數(shù)組,處理起來比較麻煩不說,如果是和VC6.0等寫的程序通信的話,很多的都是傳送結(jié)構(gòu)體,在VC6.0中可以很方便的把一個char[]數(shù)組轉(zhuǎn)換為一個結(jié)構(gòu)體,而在C#卻不能直接把byte數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體,要在C#中發(fā)送結(jié)構(gòu)體,應該怎么做呢?
    2017-11-11
  • C#?微信支付回調(diào)驗簽處理的實現(xiàn)

    C#?微信支付回調(diào)驗簽處理的實現(xiàn)

    在微信支付中,當用戶支付成功后,微信會把相關支付結(jié)果和用戶信息發(fā)送給商戶,本文就詳細的介紹了C#?微信支付回調(diào)驗簽處理,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • C#語句先后順序?qū)Τ绦虻慕Y(jié)果有影響嗎

    C#語句先后順序?qū)Τ绦虻慕Y(jié)果有影響嗎

    有朋友問我,C#中C#語句先后順序影響程序的結(jié)果嗎?告訴大家,答案是肯定的,絕對影響程序的結(jié)果,所以在程序中一定要注意C#語句的順序
    2015-10-10
  • C# 觀察者模式實例介紹

    C# 觀察者模式實例介紹

    一個簡單的例子,比如說貓叫,老鼠跑,主人被驚醒,在不知道觀察者模式之前,我們的代碼可能是這樣的
    2012-10-10
  • c# 中文轉(zhuǎn)拼音without CJK

    c# 中文轉(zhuǎn)拼音without CJK

    本文主要介紹了中文轉(zhuǎn)拼音without CJK,文章篇尾附上源碼下載。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • c#中object、var和dynamic的區(qū)別小結(jié)

    c#中object、var和dynamic的區(qū)別小結(jié)

    這篇文章主要給大家介紹了關于c#中object、var和dynamic的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09

最新評論

浦北县| 阳原县| 岑巩县| 定边县| 邯郸县| 钟山县| 边坝县| 塘沽区| 辛集市| 甘洛县| 乡宁县| 太原市| 新乐市| 明星| 图片| 普宁市| 阜阳市| 平顺县| 青铜峡市| 呈贡县| 布尔津县| 偏关县| 边坝县| 瑞昌市| 长武县| 佛冈县| 宁阳县| 大丰市| SHOW| 平利县| 长子县| 永福县| 东乌| 洛宁县| 景宁| 清水河县| 丹江口市| 景谷| 周口市| 自治县| 周至县|