使模块明
1.在要保护的页面顶部加如对AntiRefresh.asp文件的引用如:
<!--#includevirtual="AntiRefresh.asp"-->
2.接着添加调用代码
代码如下:
<%
ConstVarNameDateArr="www_domai_net_App_DataArr"队列名称
ConstVarNameIPArr="www_domai_net_App_IPArr"队列名称
DimobjAntiRefresh
SetobjAntiRefresh=newAntiRefresh
objAntiRefresh.BufferSize=100队列大小
objAntiRefresh.CacheItemAvailTime=2间隔时间
IfNotobjAntiRefresh.IsValidAccess()Then
SetobjAntiRefresh=Nothing
Response.Write("您的访问过去频繁请2秒后再试.")
Response.End()
EndIf
SetobjAntiRefresh=Nothing
%>
其中要注意的是
ConstVarNameDateArr="www_domai_net_App_DataArr"队列名称
ConstVarNameIPArr="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个页面的ConstVarNameDateArr="xxx",ConstVarNameIPArr="xxx"不同,比方第一个也面你用xxxList,第个个页面用xxxSearch,
如:
ConstVarNameDateArr="www_domai_net_App_DataArr_Search"(_List)
ConstVarNameIPArr="www_domai_net_App_IPArr_Search"(_List)
唠叨这些是给那么不太懂的朋友,以便他们能使用这些代码,如果你懂Asp那么以上的对你来说就很好理解了。
下面是AntiRefresh.asp文件源码
代码如下:
<%
***************************************
*页面防刷新模块*
*WDFrog,2007-8-16
***************************************
ClassAntiRefresh
PrivateIPArr,DateArr
Privatem_BufferSize
Privatem_CacheItemAvailTime
PrivateSubClass_Initialize()
Application.Lock()
m_BufferSize=100
m_CacheItemAvailTime=2
EndSub
PrivateSubClass_Terminate()
Application.UnLock()
EndSub
PublicPropertyGetCacheItemAvailTime
CacheItemAvailTime=m_CacheItemAvailTime
EndProperty
PublicPropertyLetCacheItemAvailTime(Value)
m_CacheItemAvailTime=Value
EndProperty
PublicPropertyGetBufferSize
BufferSize=m_BufferSize
EndProperty
PublicPropertyLetBufferSize(Value)
m_BufferSize=Value
EndProperty
PrivateSubEnsureArr()
IfIsArray(Application(VarNameDateArr))Then
DateArr=Application(VarNameDateArr)
Else
ReDimDateArr(BufferSize)
EndIf
IfIsArray(Application(VarNameIPArr))Then
IPArr=Application(VarNameIPArr)
Else
ReDimIPArr(BufferSize)
EndIf
EndSub
PublicFunctionIsValidAccess()
Dimip,i
ip=GetIP()
IsValidAccess=True
EnsureArr()
Fori=1ToBufferSize
IfIPArr(i)=ipThen
IfDateDiff("s",CDate(DateArr(i)),Now())<CacheItemAvailTimeThen
IsValidAccess=False
ExitFunction
EndIf
EndIf
Next
CallQueueHandle()
DateArr(1)=Now()
IPArr(1)=ip
Application(VarNameIPArr)=IPArr
Application(VarNameDateArr)=DateArr
EndFunction
PublicFunctionClearCache()
SetApplication(VarNameDateArr)=Nothing
SetApplication(VarNameIPArr)=Nothing
EndFunction
PrivateSubQueueHandle()
Dimi,j
Fori=BufferSize-1To1Step-1
DateArr(i+1)=DateArr(i)
Next
Forj=BufferSize-1To1Step-1
IPArr(j+1)=IPArr(j)
Next
EndSub
PrivateFunctionGetIP()
DimstrIPAddr
IfRequest.ServerVariables("HTTP_X_FORWARDED_FOR")=""ORInStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),"unknown")>0Then
strIPAddr=Request.ServerVariables("REMOTE_ADDR")
ElseIfInStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",")>0Then
strIPAddr=Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),1,InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",")-1)
ElseIfInStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),";")>0Then
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")
EndIf
GetIP=(Trim(Mid(strIPAddr,1,30)))
EndFunction
EndClass
%>
asp防止刷新
代码如下:
Subchkreflash()
dimScriptName
ScriptName=lcase(request.ServerVariables("PATH_INFO"))
dimposttime,DoReflashPage,ReflashPage,SplitReflashPage
posttime=1防止刷新时间
DoReflashPage=false
ReflashPage="|Article_one.asp"
SplitReflashPage=split(ReflashPage,"|")
fori=0toubound(SplitReflashPage)
ifinstr(scriptname,SplitReflashPage(i))>0then
DoReflashPage=true
exitfor
endif
next
if(notisnull(session("ReflashTime")))andposttime>0andDoReflashPagethen
ifDateDiff("s",session("ReflashTime"),Now())<posttimethen
callmsg("警告!系统已记录您的IP,和刷新次数。\n\n请不要在"&posttime&"秒内连续刷新本页面!","-1")
else
session("ReflashTime")=Now()
endif
elseifisnull(session("ReflashTime"))andposttime>0andDoReflashPagethen
Session("ReflashTime")=Now()
endif
EndSub
调用方法在页面首部加入chkreflash即可
|