作者真是细致,把这些东西都封装成为class了。有点过了,这些东西可以作成过程或者函数来封装,sub和function也是封装,不一定非要class才可以。您的文件库不一定全部都是class,一些sub和funtion都是必要的。 实现的功能包括 1,showInfo(e_title,c_url,e_num,e_des,e_time,opera,ip,reurl):显示错误信息 2,getIP():取得客户IP 3,checkPost():验证是否是站外提交 4,getReferer():来路记录 5,getCurURL():取得当前页面路径 6,isRefresh(s1,s2,maxtimes):防刷新 完整代码: <% '****************************** '名称:eventProvider(事件类) '日期:2006/11/24 '作者:西楼冷月 '网址:www.xilou.net | www.chinaCMS.org '描述:无 '版权:转载请注名出处,作者 '****************************** '最后修改:2006/11/24 '修改次数:0 '修改说明:无 '目前版本:v1.0.0 '****************************** Class eventProvider
Private logDBName'日志表名 'www.ASPxuexi.com asp学习网 '初始化 Private Sub Class_Initialize() logDBName="LogInfo" End Sub ' Private Sub Class_Terminate()
End Sub '预定义事件的标题,也可以说是类型 Public Function eventTitles(typenum) Dim arrType(9) arrType(0)="未知事件" arrType(1)="非法的用户登陆" arrType(2)="URL传递非法参数" arrType(3)="登陆传入非法字符" arrType(4)="登陆频繁,超过规定时间内登陆次数" arrType(5)="查询传入非法字符" arrType(6)="查询频繁,超过规定时间内查询次数" arrType(7)="页面刷新频繁,超过规定时间内刷新次数" arrType(8)="站外提交数据" arrType(9)="后台登陆" If Not IsNumeric(typenum) Then eventTitles="未知事件":Exit Function If CLng(Abs(typenum))>UBound(arrType) Then eventTitles="未知事件":Exit Function End If eventTitles=arrType(typenum) End Function '预定数组显示错误 Public Sub showArrayInfo(infoitems,infovalues) Dim str str="<div style='border:2px solid #4E4E9C;font-family:arial ;color:#800040;width:50%;font-size:9pt'>" str=str&"<ul style='margin:20px;'><b>Asp Event Infomation:</b>"&vbcrlf If IsArray(infoitems) And IsArray(infovalues) Then For I=LBound(infoitems) To UBound(infoitems) str=str&"<li><b style='color:#4E4E9C'>"&infoitems(I)&":</b>"&infovalues(I)&vbcrlf Next Else str=str&"<li><b>"&infoitems&"</b>:"&infovalues&vbcrlf End If str=str&"</ul></div>"&vbcrlf Response.Write str End Sub '显示错误 Public Sub showInfo(e_title,c_url,e_num,e_des,e_time,opera,ip,reurl) Dim infoitems,infovalues infoitems=Array("Event Title","Event Url","EventNumber","EventDescription",_ "EventTime","Operator","IP","Referer Url"_ ) infovalues=Array(e_title,c_url,e_num,e_des,e_time,opera,ip,reurl) showArrayInfo infoitems,infovalues End Sub '显示原文件的有关信息 Public Sub showOriInfo(oriclass,orifunction,oripage) Dim infoitems,infovalues infoitems=Array("Original class","Original function","Original page") infovalues=Array(oriclass,orifunction,oripage) showArrayInfo infoitems,infovalues End Sub '获取ip Public Function getIP() Dim IP '如果客户端用了代理服务器,则应该用ServerVariables("HTTP_X_FORWARDED_FOR")方法 IP = Request.ServerVariables("HTTP_X_FORWARDED_FOR") If IP = "" or isnull(IP) or isempty(IP) Then '如果客户端没用代理,应该用Request.ServerVariables("REMOTE_ADDR")方法 IP = Request.ServerVariables("REMOTE_ADDR") end if getIP = IP End Function '站外提交验证 Public Function checkPost() Dim server_v1,server_v2 checkPost=False server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")) server_v2=Cstr(Request.ServerVariables("SERVER_NAME")) If Mid(server_v1,8,len(server_v2))=server_v2 Then checkPost=True End Function '获取来路 Public Function getReferer() getReferer=Request.ServerVariables("HTTP_REFERER") End Function '得到浏览器目前的URL Public Function getCurURL() If Request.ServerVariables("HTTPS") = "on" Then GetCurrentURL = "https://" Else GetCurrentURL = "http://" End If GetCurURL = GetCurURL & Request.ServerVariables("SERVER_NAME") If (Request.ServerVariables("SERVER_PORT") <> 80) Then GetCurURL = GetCurURL & ":" & Request.ServerVariables("SERVER_PORT") GetCurURL = GetCurURL & Request.ServerVariables("URL") If (Request.QueryString <> "") Then GetCurURL = GetCurURL & "?" & Request.QueryString End Function '获取来路或得到浏览器目前的URL,综合前面两个 Public Function getUrl(t) If t=1 Then getUrl=getCurURL() Else getUrl=getReferer() End If End Function '防刷新 's1:超过s1秒后才允许访问 's2:如果现在时间和上次访问时间相差s2秒则视为刷新频繁 'maxtimes:如果频繁刷新次数等于或大于maxtimes次则记录 '如果是刷新频繁则isRefresh=true,否则为false Public Function isRefresh(s1,s2,maxtimes) Dim CacheName CacheName="eventProvider_2006"
If IsDate(Session(CacheName&"IsRefreshTime")) Then'超过s1秒后才允许访问 If DateDiff("s",Session(CacheName&"IsRefreshTime"),Now())>s1 Then Session(CacheName&"IsRefreshTime")=Now() Session(CacheName&"IsRefresh")=False End If End If If Session(CacheName&"IsRefresh")=True Then isRefresh=True Else isRefresh=False End If
If IsDate(Session(CacheName&"RefreshStart")) Then If DateDiff("s",Session(CacheName&"RefreshStart"),Now())<s2 Then'//如果现在时间和上次访问时间相差s2秒则视为刷新频繁 Session(CacheName&"RefreshT")=Session(CacheName&"RefreshT")+1'//统计频繁刷新次数 If Session(CacheName&"RefreshT")>=maxtimes Then'//如果频繁刷新次数等于或大于maxtimes次则记录 Session(CacheName&"IsRefresh")=True Session(CacheName&"IsRefreshTime")=Now() End If Else Session(CacheName&"RefreshT")=0'//如果不是,则把记录频繁刷新次数变为0 End If End If
Session(CacheName&"RefreshStart")=Now()'//保留这一次访问的时间到下次访问时用 End Function '写入数据库日志 Public Sub writeToDB(e_title,c_url,e_num,e_des,e_time,opera,ip,reurl,conn) Dim sql sql="Insert INTO "&logDBName&"(eTitle,eUrl,eNum,eDes,eTime,Operator,IP,RefererUrl) VALUES(" sql=sql&"'"&e_title&"','"&c_url&"','"&e_num&"','"&e_des&"','"&e_time&"','"&opera&"','"&ip&"','"&reurl&"')" conn.Execute(sql) End Sub
End Class %>
(责任编辑:admin) |