兔八哥极品软件园    运行: 4493天 | 文章:640 篇 | 评论:505 条 | 碎语:1条

asp.net限制同一IP的访问频率

作者:admin 发布于:2014-3-29 23:52 Saturday 分类:网络转载


用HttpContext.Cache记录访问次数,将IP值与用户访问方式作为共同的Key,可以对用户的不同访问方式做不同的限制。超出限额时调用Response.End()。


  具体代码:


  一、 定义持续时间


  在本例中,我们使用240分钟作为一次限制的时间。


  private const int DURATION = 240


  二、定义访问方式枚举


  针对不同的访问方式进行不同的限制。在本例中,我们只区分两种访问方式:正常访问与PostBack。在正常应用中,您还可以根据需要增加访问不同页面的限制。  

public enum ActionTypeEnum { Normal=40, Postback=100 }

  三、判断逻辑


  在某IP第一次采用某种访问方式进行访问时,增加Cache的Key=访问方式+IP,返回True如果Key已经存在,增加访问次数,返回True,如果超出次数,返回False

public static bool IsValid(ActionTypeEnum actionType) { HttpContext context = HttpContext.Current; if (context.Request.Browser.Crawler) return false; string key = actionType.ToString() + context.Request.UserHostAddress; int hit = (Int32)(context.Cache[key] ?? 0); if (hit > (Int32)actionType) return false; else hit++; if (hit == 1) { context.Cache.Add(key, hit, null, DateTime.Now.AddMinutes(DURATION), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null); } else { context.Cache[key] = hit; } return true; }

  四、在页面中调用


  判断函数需要在页面的OnInit方法中调用。在这里需要使用一些自己定义的逻辑,来进行不同访问方式的判断。下面的例子是一个最简单的,只区分正常访问与Postback。


  

protected override void OnInit(EventArgs e) { base.OnInit(e); if (!IsPostBack) { if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Normal)) { Response.Write("您发送得太频繁,被系统判断为广告。广告或其他定制业务请联系邮箱service@wangqi.com,谢谢。- http://www.wangqi.com"); Response.End(); } } else { if (!ActionValidator.IsValid(ActionValidator.ActionTypeEnum.Postback)) { Response.Write("您发送得太频繁,被系统判断为广告。广告或其他定制业务请联系邮箱service@wangqi.com,谢谢。- http://www.wangqi.com"); Response.End(); } } }

标签: ASP.NET


Powered by 兔八哥极品软件 苏ICP备12049267号 sitemap