public class Clicker {
//请求的时间
public DateTime clickTime;
//请求的IP
public string ip;
//同一请求的次数(如果一个IP刷新了几次)
public int count;
//验证这次请求是否有效,当然你也可以不用加对象(为了性能可采用字符串形式也是可以的)
public static bool ClickVali(Hashtable h,Clicker c) {
if(h.ContainsKey(c.ip)) {
//此处我只是简单的请求间隔不超过1分钟
System.TimeSpan ts=c.clickTime-((Clicker)h[c.ip]).clickTime;
if(ts.TotalMinutes<1) return false;
else((Clicker)h[c.ip]).count++;
}
else { c.count++; h.Add(c.ip,c); }
return true;
}
//因为统计的方法可以会不一样(比如有可能统计所有访问次数) //我这里只统计有效IP访问数
public static int Count(Hashtable h) { return h.Count; }
//当请求过多(比如5万以上将以保存)保存形式有不同的方案
public static void Store(Hashtable h) { }
}
public partial class _Default :System.Web.UI.Page{
//在Load事件中包装一个Clicker类操作相应的方法.测试如下
private static Hashtable h=new Hashtable();
private void Page_Load(object sender, System.EventArgs e) {
Clicker c=new Clicker();
c.clickTime=DateTime.Now;
c.ip=Request.UserHostAddress;
if(!Clicker.ClickVali(h,c)) Msg.Text="请不要频繁刷新!";
else Msg.Text=Clicker.Count(h).ToString();
}
}
//请求的时间
public DateTime clickTime;
//请求的IP
public string ip;
//同一请求的次数(如果一个IP刷新了几次)
public int count;
//验证这次请求是否有效,当然你也可以不用加对象(为了性能可采用字符串形式也是可以的)
public static bool ClickVali(Hashtable h,Clicker c) {
if(h.ContainsKey(c.ip)) {
//此处我只是简单的请求间隔不超过1分钟
System.TimeSpan ts=c.clickTime-((Clicker)h[c.ip]).clickTime;
if(ts.TotalMinutes<1) return false;
else((Clicker)h[c.ip]).count++;
}
else { c.count++; h.Add(c.ip,c); }
return true;
}
//因为统计的方法可以会不一样(比如有可能统计所有访问次数) //我这里只统计有效IP访问数
public static int Count(Hashtable h) { return h.Count; }
//当请求过多(比如5万以上将以保存)保存形式有不同的方案
public static void Store(Hashtable h) { }
}
public partial class _Default :System.Web.UI.Page{
//在Load事件中包装一个Clicker类操作相应的方法.测试如下
private static Hashtable h=new Hashtable();
private void Page_Load(object sender, System.EventArgs e) {
Clicker c=new Clicker();
c.clickTime=DateTime.Now;
c.ip=Request.UserHostAddress;
if(!Clicker.ClickVali(h,c)) Msg.Text="请不要频繁刷新!";
else Msg.Text=Clicker.Count(h).ToString();
}
}