C# 站点IP访问频率限制 针对单个站点的实现方法
站点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访问频率限制 针对单个站点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
栏 目:C#教程
下一篇:浅谈C#多线程简单例子讲解
本文标题:C# 站点IP访问频率限制 针对单个站点的实现方法
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/6146.html
您可能感兴趣的文章
- 01-10C#使用ADO.Net部件来访问Access数据库的方法
- 01-10C#修改IIS站点framework版本号的方法
- 01-10C#实现获取IIS站点及虚拟目录信息的方法
- 01-10C#访问SQL Server数据库的实现方法
- 01-10详解C#中的接口属性以及属性访问器的访问限制
- 01-10在C#使用字典存储事件示例及实现自定义事件访问器
- 01-10浅谈Visual C#进行图像处理(读取、保存以及对像素的访问)
- 01-10C# Winform 子窗体访问父级窗体的控件和属性
- 01-10C#简单访问SQLite数据库的方法(安装,连接,查询等)
- 01-10C#访问SQLServer增删改查代码实例
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频播放器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10C#中split用法实例总结
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-11ajax实现页面的局部加载
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10delphi制作wav文件的方法
- 04-02jquery与jsp,用jquery
- 01-10SublimeText编译C开发环境设置