欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 站點(diǎn)IP訪問(wèn)頻率限制 針對(duì)單個(gè)站點(diǎn)的實(shí)現(xiàn)方法

 更新時(shí)間:2016年12月02日 09:15:39   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇C# 站點(diǎn)IP訪問(wèn)頻率限制 針對(duì)單個(gè)站點(diǎn)的實(shí)現(xiàn)方法。小編覺(jué)的挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

 站點(diǎn)IP訪問(wèn)頻率限制 針對(duì)單個(gè)站點(diǎn)

using System;
using System.Collections.Generic;
using System.IO;
//using System.Linq;
using System.Web;

// <summary>
// IP訪問(wèn)頻率控制
// </summary> 
public static class IPCacheManager
{

  /// <summary>
  /// IP緩存集合 
  /// </summary> 
  private static List<IPCacheInfo> dataList = new List<IPCacheInfo>();
  private static object lockObj = new object();

  /// <summary> 
  /// 一段時(shí)間內(nèi),最大請(qǐng)求次數(shù),必須大于等于1 
  /// </summary> 
  private static int maxTimes = 3;

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

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

  static IPCacheManager()
  {
  }

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

  /// <summary> 
  /// 檢測(cè)一段時(shí)間內(nèi),IP的請(qǐng)求次數(shù)是否可以繼續(xù)請(qǐng)求 
  /// 和使用 
  /// </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 請(qǐng)求被拒絕也需要加入當(dāng)次請(qǐng)求
          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 請(qǐng)求被拒絕就不需要加入當(dāng)次請(qǐng)求了
          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# 站點(diǎn)IP訪問(wèn)頻率限制 針對(duì)單個(gè)站點(diǎn)的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c#使用反射調(diào)用類(lèi)型成員示例

    c#使用反射調(diào)用類(lèi)型成員示例

    學(xué)習(xí)C#的時(shí)候就知道使用反射可以對(duì)我們編程提供極大的便利(動(dòng)態(tài)的獲取信息、調(diào)用類(lèi)型成員、創(chuàng)建實(shí)例等等),下面示例說(shuō)明一下使用方法
    2014-01-01
  • Unity3d實(shí)現(xiàn)Flappy Bird游戲

    Unity3d實(shí)現(xiàn)Flappy Bird游戲

    這篇文章主要為大家詳細(xì)介紹了Unity3d實(shí)現(xiàn)Flappy Bird游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C#實(shí)現(xiàn)的滾動(dòng)網(wǎng)頁(yè)截圖功能示例

    C#實(shí)現(xiàn)的滾動(dòng)網(wǎng)頁(yè)截圖功能示例

    這篇文章主要介紹了C#實(shí)現(xiàn)的滾動(dòng)網(wǎng)頁(yè)截圖功能,結(jié)合具體實(shí)例形式分析了C#圖形操作的相關(guān)技巧,需要的朋友可以參考下
    2017-07-07
  • WPF快速入門(mén)教程之綁定Binding

    WPF快速入門(mén)教程之綁定Binding

    初學(xué)wpf,經(jīng)常被Binding搞暈,以下記錄寫(xiě)B(tài)inding的基礎(chǔ)。下面這篇文章主要給大家介紹了關(guān)于WPF快速入門(mén)教程之綁定Binding的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-10-10
  • c# 利用易福門(mén)振動(dòng)模塊VSE002采集振動(dòng)數(shù)據(jù)的方法

    c# 利用易福門(mén)振動(dòng)模塊VSE002采集振動(dòng)數(shù)據(jù)的方法

    這篇文章主要介紹了c# 利用易福門(mén)振動(dòng)模塊VSE002采集振動(dòng)數(shù)據(jù)的方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C#使用linq查詢(xún)大數(shù)據(jù)集的方法

    C#使用linq查詢(xún)大數(shù)據(jù)集的方法

    這篇文章主要介紹了C#使用linq查詢(xún)大數(shù)據(jù)集的方法,涉及C#調(diào)用linq進(jìn)行數(shù)據(jù)查詢(xún)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Avalonia封裝實(shí)現(xiàn)指定組件允許拖動(dòng)的工具類(lèi)

    Avalonia封裝實(shí)現(xiàn)指定組件允許拖動(dòng)的工具類(lèi)

    這篇文章主要為大家詳細(xì)介紹了Avalonia如何封裝實(shí)現(xiàn)指定組件允許拖動(dòng)的工具類(lèi),文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C#基于TCP實(shí)現(xiàn)簡(jiǎn)單游戲客戶(hù)端的完整實(shí)例

    C#基于TCP實(shí)現(xiàn)簡(jiǎn)單游戲客戶(hù)端的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于C#基于TCP實(shí)現(xiàn)簡(jiǎn)單游戲客戶(hù)端的相關(guān)資料,通過(guò)本文介紹的方法可以直接實(shí)現(xiàn)游戲客戶(hù)端,是個(gè)非常適合學(xué)習(xí)的實(shí)例需要的朋友可以參考下
    2021-11-11
  • C#泛型用法實(shí)例分析

    C#泛型用法實(shí)例分析

    這篇文章主要介紹了C#泛型用法,實(shí)例分析了C#泛型的功能、定義與使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#與Java的MD5簡(jiǎn)單驗(yàn)證(實(shí)例代碼)

    C#與Java的MD5簡(jiǎn)單驗(yàn)證(實(shí)例代碼)

    下面小編就為大家?guī)?lái)一篇C#與Java的MD5簡(jiǎn)單驗(yàn)證(實(shí)例代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09

最新評(píng)論