asp防止刷新功能实现代码

使用说明
1.在要保护的页面顶部加如对AntiRefresh.asp文件的引用如:
<!--#include virtual="AntiRefresh.asp" -->
2.接着添加调用代码


代码如下:

<%
Const VarNameDateArr="www_domai_net_App_DataArr" '队列名称
Const VarNameIPArr="www_domai_net_App_IPArr" '队列名称
Dim objAntiRefresh
Set objAntiRefresh= new AntiRefresh
objAntiRefresh.BufferSize=100 '队列大小
objAntiRefresh.CacheItemAvailTime=2 '间隔时间
If Not objAntiRefresh.IsValidAccess() Then
Set objAntiRefresh=Nothing
Response.Write("您的访问过去频繁请2秒后再试.")
Response.End()
End If
Set objAntiRefresh=Nothing
%>

其中要注意的是
Const VarNameDateArr="www_domai_net_App_DataArr" '队列名称
Const VarNameIPArr="www_domai_net_App_IPArr" '队列名称
比方你要在List.asp与search.asp中加入通一个防刷新器,那么你把上面的调用代码分别复制到这两个页面,或者保证两个页面的掉用代码一致。这样的效果是,你访问了List.asp页那么你在2秒内将不能访问List.asp或Search.asp页
如果你要2个页面独立,即你访问List.asp后,你会在2秒内不能再次访问List.asp,但是你可以访问Search.asp,反之毅然,那么你就要保证2个页面的 Const VarNameDateArr="xxx",Const VarNameIPArr="xxx"不同,比方第一个也面你用xxxList,第个个页面用xxxSearch,
如:
Const VarNameDateArr="www_domai_net_App_DataArr_Search" '(_List)
Const VarNameIPArr="www_domai_net_App_IPArr_Search" '(_List)
唠叨这些是给那么不太懂的朋友,以便他们能使用这些代码,如果你懂Asp那么以上的对你来说就很好理解了。
下面是AntiRefresh.asp文件源码


代码如下:

<%
'***************************************
'* 页面防刷新模块 *
'* WDFrog,2007-8-16
'***************************************
Class AntiRefresh
Private IPArr,DateArr
Private m_BufferSize
Private m_CacheItemAvailTime
Private Sub Class_Initialize()
Application.Lock()
m_BufferSize=100
m_CacheItemAvailTime=2
End Sub
Private Sub Class_Terminate()
Application.UnLock()
End Sub
Public Property Get CacheItemAvailTime
CacheItemAvailTime=m_CacheItemAvailTime
End Property
Public Property Let CacheItemAvailTime(Value)
m_CacheItemAvailTime=Value
End Property
Public Property Get BufferSize
BufferSize=m_BufferSize
End Property
Public Property Let BufferSize(Value)
m_BufferSize=Value
End Property
Private Sub EnsureArr()
If IsArray(Application(VarNameDateArr)) Then
DateArr=Application(VarNameDateArr)
Else
ReDim DateArr(BufferSize)
End If
If IsArray(Application(VarNameIPArr)) Then
IPArr=Application(VarNameIPArr)
Else
ReDim IPArr(BufferSize)
End If
End Sub
Public Function IsValidAccess()
Dim ip,i
ip=GetIP()
IsValidAccess=True
EnsureArr()
For i=1 To BufferSize
If IPArr(i)=ip Then
If DateDiff("s",CDate(DateArr(i)),Now()) < CacheItemAvailTime Then
IsValidAccess=False
Exit Function
End If
End If
Next
Call QueueHandle()
DateArr(1)=Now()
IPArr(1)=ip
Application(VarNameIPArr)=IPArr
Application(VarNameDateArr)=DateArr
End Function
Public Function ClearCache()
Set Application(VarNameDateArr)=Nothing
Set Application(VarNameIPArr)=Nothing
End Function
Private Sub QueueHandle()
Dim i,j
For i=BufferSize-1 To 1 Step -1
DateArr(i+1)=DateArr(i)
Next
For j=BufferSize-1 To 1 Step -1
IPArr(j+1)=IPArr(j)
Next
End Sub
Private Function GetIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
GetIP = (Trim(Mid(strIPAddr, 1, 30)))
End Function
End Class
%>

asp防止刷新


代码如下:

Sub chkreflash()
    dim ScriptName
    ScriptName=lcase(request.ServerVariables("PATH_INFO"))
    dim posttime,DoReflashPage,ReflashPage,SplitReflashPage
    posttime=1 '防止刷新时间
    DoReflashPage=false
    ReflashPage="|Article_one.asp"
    SplitReflashPage=split(ReflashPage,"|")
        for i=0 to ubound(SplitReflashPage)
             if instr(scriptname,SplitReflashPage(i))>0 then
                DoReflashPage=true
            exit for
             end if
        next
    if (not isnull(session("ReflashTime"))) and posttime>0 and DoReflashPage then
        if DateDiff("s",session("ReflashTime"),Now())<posttime then
            call msg("警告!系统已记录您的IP,和刷新次数。\n\n请不要在"&posttime&"秒内连续刷新本页面!","-1")
        else
        session("ReflashTime")=Now()
        end if
    elseif isnull(session("ReflashTime")) and posttime>0 and DoReflashPage then
        Session("ReflashTime")=Now()
    end if
End Sub

调用方法在页面首部加入chkreflash即可

(0)

相关推荐

  • 用Asp如何实现防止网页频繁刷新?

    <%     dim RefreshIntervalTime     RefreshIntervalTime = 3 '防止刷新的时间秒数,0表示不防止     If Not IsEmpty(Session("visit")) and isnumeric(Session("visit")) and int(RefreshIntervalTime) > 0 Then      if (timer()-int(Session("visit"

  • PHP防止刷新重复提交页面的示例代码

    PHP防止刷新重复提交页面的示例代码 作为phper,我们在开发和学习php过程中,难免要经常的接受处理表单数据,然而处理表单的时候总会有一个问题,困扰大家,刷新页面重复提交的问题.如何防止刷新页面重复提交呢? PHP防止刷新重复提交,通过不断刷新(Refresh or Reload)表单提交页面,可以重复提交表单内容,可以利用 PHP 的 Session 来避免这一点,Session 保存在服务器端,在 PHP 过程中改变 Session 变量的值后,即保存在服务器端,下次访问这个变量时,得到

  • php环境下利用session防止页面重复刷新的具体实现

    b.php的代码 复制代码 代码如下: <?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip,以便于针对ip限制刷新 /*获取真实ip开始*/

  • Asp.Net防止刷新重复提交数据的办法

    在网上搜 一下,可以找到很多关于这方面的资料,其中有一篇是来自MSDN上的一种解决方法: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/BedrockASPNET.asp 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是"刷新"."后退"请求,还是正常请求,其他的页面则继承了自定义的这 个Page类.感觉他这个方法比较独特,有例子

  • ASP.NET防止页面刷新的两种解决方法小结

    方法有二,总结如下: 第一方法: 直接在CS代码里敲: Response.Buffer = true; Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1); Response.Expires = 0; Response.CacheControl = "no-cache"; 当有人想按后退时页面已过期,效果就达到了 第二方法: SubmitOncePage:解决刷新页面造成的数据重复提交问题(网上资料) 执行过postback操作

  • ASP.Net中防止刷新自动触发事件的解决方案

    使用asp.net,在刷新页面的时候会自动触发服务器端的事件.举个简单的例子,如:一个注册页面,我们填写完注册信息之后,如果按F5刷新之后,会自动触发到Button事件上,这样就造成了又注册了一次的麻烦. 我先前的解决方案:用关键字查询,如有相同,则提示已有此用户. 但是这种方案不能在没有表识的情况下使用,他会重新提交.鉴于此,我寻找了一种新的解决方案,很庆幸,在朋友的提点下,迸发了这样的解决方案,肯定有更好的解决方案,不吝赐教. 解决思路:刷新时,捕捉KeyPress,让他触发其他无用的事件.

  • php采用session实现防止页面重复刷新

    如何防止页面重复刷新,在php环境下可以利用session来轻松实现. b.php的代码 <?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip

  • ASP.NET中防止页面刷新造成表单重复提交执行两次操作

    之前看过别人防刷新的方法,是让页面刷新或返回上一步让页面过期,这里介绍一种另类的方法,使用Session来处理. 实现原理: 由于刷新提交表单,实际上提交的就是上一次正常提交的表单,所以我们只要做一个标志,判断出是新表单还是上一次的旧表单就可以分辨出是否进行了重复提交操作. 实现方法: 在页面上放置一个Hidden域,当页面第一次载入的时候,在Session里面保存一个标志,同时,把这个标志保存到页面上的Hidden里面.在提交表单时,判断表单中提交上来的Hidden和Session中的标志是否

  • ASP.Net防止刷新自动触发事件的解决方案

    使用asp.net,在刷新页面的时候会自动触发服务器端的事件.举个简单的例子,如:一个注册页面,我们填写完注册信息之后,如果按F5刷新之后,会自动触发到Button事件上,这样就造成了又注册了一次的麻烦. 我先前的解决方案:用关键字查询,如有相同,则提示已有此用户. 但是这种方案不能在没有表识的情况下使用,他会重新提交.鉴于此,我寻找了一种新的解决方案,很庆幸,在朋友的提点下,迸发了这样的解决方案,肯定有更好的解决方案,不吝赐教. 解决思路:刷新时,捕捉KeyPress,让他触发其他无用的事件.

  • php防止网站被刷新的方法汇总

    本文实例讲述了php防止网站被刷新的方法.分享给大家供大家参考.具体方法如下: 对于像采用WP建设的站来说,频繁的刷新会导致数据库吃紧.下面附上一段代码,防止频繁的刷新造成的死机情况. 方法一,代码如下: 复制代码 代码如下: <?php       session_start();       $k=$_GET['k'];       $t=$_GET['t'];       $allowTime = 1800;//防刷新时间       $ip = get_client_ip();     

  • asp.net防止刷新时重复提交(可禁用工具条刷新按钮)

    前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉. 如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这下子可就复杂化了. asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例 1. 复制代码 代码如下: private bool pageRefres

随机推荐