防止恶意刷新网站内的网页

yxy10072510329 2009-10-27 10:00:55
我现在有一个大型的网站,
请问我如何在这个网站的全局类或者模板类里加上代码可以控制该网站的所有网页在20秒内不能被刷新10次以上,最好是C#的代码,谢谢高手赐教
...全文
903 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloaspdotnet 2011-07-07
  • 打赏
  • 举报
回复
会话状态在此上下文中不可用。
报这个错误啊!怎么搞?
webdiyer 2009-12-07
  • 打赏
  • 举报
回复
这个真不好处理,一般恶意刷新用的都是自动刷新的软件而不是浏览器,检查Cookie和Session的办法是行不通的,因为这些软件根本不保存cookie,依赖于cookie的session也就派不上用场了,至于检查IP地址也不太好,因为一个IP地址并不一定对应一个用户,它很可能是某个内部网的对外IP,硬件防火墙不知是否有种防攻击技术?
=============================
www.webdiyer.com
  • 打赏
  • 举报
回复
^:^
gxq323 2009-12-07
  • 打赏
  • 举报
回复
zhulong1111 2009-12-07
  • 打赏
  • 举报
回复
ding !
hfrll 2009-12-07
  • 打赏
  • 举报
回复
不错 正是我需要的……
编程有钱人了 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yxy10072510329 的回复:]
引用 7 楼 jshi123 的回复:
在Global.asax.cs中加上这段就行了:
C# codeprotectedvoid Application_PostAcquireRequestState(Object sender, EventArgs e)
    {
        Queue <DateTime> clicks= Session["clicks"]as Queue <DateTime>;if (clicks==null)
            Session["clicks"]= clicks=new Queue <DateTime>();if (clicks.Count>=10)
        {if ((DateTime.Now- clicks.Peek()) < TimeSpan.FromSeconds(20))
            {
                Response.Write("刷太多了吧");
                Response.End();
            }else
                clicks.Dequeue();
        }
        clicks.Enqueue(DateTime.Now);
    }


你的代码是我想要的,但好像有点错误,我放在global里面,报下面的错误

说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。

编译器错误消息: CS0308: 非泛型 类型“System.Collections.Queue”不能与类型参数一起使用

源错误:



行 67:        protected void Application_PostAcquireRequestState(Object sender, EventArgs e)
行 68:        {
行 69:            Queue <DateTime> clicks = Session["clicks"] as Queue <DateTime>;
行 70:            if (clicks == null)
行 71:                clicks = new Queue <DateTime>();


[/Quote]


加上<%@ Application Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %>
蝶恋花雨 2009-11-02
  • 打赏
  • 举报
回复
 //判断无数次刷新页面而增加的浏览次数
HttpCookie cookie=System.Web.HttpContext.Current.Request.Cookies["HttpUrl"];
if (cookie != null)
{
string url = cookie["weburl"].ToString();

if (System.Web.HttpContext.Current.Request.RawUrl != url)
{
}
}
else
{
//更新一次浏览次数
sqlt.Sys_Paras.Add("@logid", SqlDbType.Int).Value = logid;
sqlt.Operate("update game_log set logbrowse=isnull(logbrowse,0)+1 where logid =@logid");
sqlt.Sys_Paras.Clear(); sqlt.ConClose();
}

//把浏览相片的URL写入COOKIES进行判断是否对此刷新
HttpCookie cookies = new HttpCookie("HttpUrl");
cookies["weburl"] = System.Web.HttpContext.Current.Request.RawUrl;
TimeSpan ts = new TimeSpan(0, 24, 0, 0);//过期时间为1天
cookies.Expires = DateTime.Now.Add(ts);//设置过期时间
System.Web.HttpContext.Current.Response.Cookies.Add(cookies);

参考我是这样做的。
yxy10072510329 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jshi123 的回复:]
在Global.asax.cs中加上这段就行了:
C# codeprotectedvoid Application_PostAcquireRequestState(Object sender, EventArgs e)
{
Queue<DateTime> clicks= Session["clicks"]as Queue<DateTime>;if (clicks==null)
Session["clicks"]= clicks=new Queue<DateTime>();if (clicks.Count>=10)
{if ((DateTime.Now- clicks.Peek())< TimeSpan.FromSeconds(20))
{
Response.Write("刷太多了吧");
Response.End();
}else
clicks.Dequeue();
}
clicks.Enqueue(DateTime.Now);
}
[/Quote]

你的代码是我想要的,但好像有点错误,我放在global里面,报下面的错误

说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。

编译器错误消息: CS0308: 非泛型 类型“System.Collections.Queue”不能与类型参数一起使用

源错误:



行 67: protected void Application_PostAcquireRequestState(Object sender, EventArgs e)
行 68: {
行 69: Queue<DateTime> clicks = Session["clicks"] as Queue<DateTime>;
行 70: if (clicks == null)
行 71: clicks = new Queue<DateTime>();

sunzsh 2009-10-27
  • 打赏
  • 举报
回复
不知道缓存能不能帮上楼主的忙
jshi123 2009-10-27
  • 打赏
  • 举报
回复
在Global.asax.cs中加上这段就行了:

protected void Application_PostAcquireRequestState(Object sender, EventArgs e)
{
Queue<DateTime> clicks = Session["clicks"] as Queue<DateTime>;
if (clicks == null)
Session["clicks"] = clicks = new Queue<DateTime>();

if (clicks.Count >= 10)
{
if ((DateTime.Now - clicks.Peek()) < TimeSpan.FromSeconds(20))
{
Response.Write("刷太多了吧");
Response.End();
}
else
clicks.Dequeue();
}
clicks.Enqueue(DateTime.Now);
}

yxy10072510329 2009-10-27
  • 打赏
  • 举报
回复
楼上的方法用了还是不行啊,我把他加在了模板类里,狂刷新什么反应都没有
shankaipingo 2009-10-27
  • 打赏
  • 举报
回复
发错了,上一个是对的
shankaipingo 2009-10-27
  • 打赏
  • 举报
回复

public partial class Default : BaseMasterPage
{
public bool IsBot = false;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["resptime"] == null)
Session["resptime"] = DateTime.Now;
}
if (CheckBot())
{
// this.Response.StatusCode = 304;
IsBot = true;
}
}


protected void btnSearch_Click(object sender, EventArgs e)
{
Server.Transfer(String.Format(Page.ResolveUrl("~/Search.aspx?act=query&query={0}"), Server.UrlEncode(txtSearch.Text.Trim())));
}


private bool CheckBot()
{
if (DateTime.Now.AddSeconds(-1) < (DateTime)Session["resptime"])
{
Session["resptime"] = DateTime.Now;
return true;
}
else
{
Session["resptime"] = DateTime.Now;
return false;
}
}

}

shankaipingo 2009-10-27
  • 打赏
  • 举报
回复
{
public bool IsBot = false;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Session["resptime"] == null)
Session["resptime"] = DateTime.Now;
}
if (CheckBot())
{
this.Response.StatusCode = 304;
//IsBot = true;
}
}


protected void btnSearch_Click(object sender, EventArgs e)
{
Server.Transfer(String.Format(Page.ResolveUrl("~/Search.aspx?act=query&query={0}"), Server.UrlEncode(txtSearch.Text.Trim())));
}


private bool CheckBot()
{
if (DateTime.Now.AddSeconds(-1) < (DateTime)Session["resptime"])
{
Session["resptime"] = DateTime.Now;
return true;
}
else
{
Session["resptime"] = DateTime.Now;
return false;
}
}

}
试试
hanyucq123 2009-10-27
  • 打赏
  • 举报
回复
还是用个防CC软件吧
zhouyanfss 2009-10-27
  • 打赏
  • 举报
回复
没代码,给你思路
存10个cookie值,分别存前10此页面请求的时间,页面这边取第一次与当前时间比,在20秒内,提示,否则,将10个cookie值往前推,丢弃cookie1的,cookie2变到cookie1,cookie3-cookie2.。。、最后cookie10存当前时间
criedshy 2009-10-27
  • 打赏
  • 举报
回复
加验证码
nomoguai 2009-10-27
  • 打赏
  • 举报
回复
帮我解决一个问题好吗?
http://topic.csdn.net/u/20091027/14/82fdc0cc-ca92-4343-9c52-ed076439ad37.html?16622
shankaipingo 2009-10-27
  • 打赏
  • 举报
回复
this.Response.StatusCode = 304;
这样就是显示在老界面上啊。。
加载更多回复(3)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧