注意:系统需要FSO权限、XMLHTTP权限

系统包括两个文件,其实可以合并为一个。之所以分为两个是因为部分杀毒软件会因为里边含有FSO、XMLHTTP操作而被认为是脚本木马。

调用时,需要在ASP页面的最上边包含主文件,然后在下边写下以下代码

  1. Set MyCatch=new CatchFile
  2. MyCatch.Overdue=60*5        '修改过期时间设置为5个小时
  3. if MyCatch.CatchNow(Rev) then
  4. response.write MyCatch.CatchData
  5. response.end
  6. end if
  7. set MyCatch=nothing

复制代码

文件一:FileCatch.asp 的代码

  1. <!--#include file="FileCatch-Inc.asp"-->
  2. <%
  3. '---- 本文件用于签入原始文件,实现对页面的文件Catch
  4. '---- 1、如果文件请求为POST方式,则取消此功能
  5. '---- 2、文件的请求不能包含系统的识别关键字
  6. '---- 3、作者 何直群 (www.wozhai.com)
  7. Class CatchFile
  8. Public Overdue,Mark,CFolder,CFile '定义系统参数
  9. Private ScriptName,ScriptPath,ServerHost '定义服务器/页面参数变量
  10. Public CatchData        '输出的数据
  11. Private Sub Class_Initialize        '初始化函数
  12. '获得服务器及脚本数据
  13. ScriptName=Request.Servervariables("Script_Name") '识别出当前脚本的虚拟地址
  14. ScriptPath=GetScriptPath(false)        '识别出脚本的完整GET地址
  15. ServerHost=Request.Servervariables("Server_Name") '识别出当前服务器的地址
  16. '初始化系统参数
  17. Overdue=30        '默认30分钟过期
  18. Mark="NoCatch"        '无Catch请求参数为 NoCatch
  19. CFolder=GetCFolder        '定义默认的Catch文件保存目录
  20. CFile=Server.URLEncode(ScriptPath)&".txt"        '将脚本路径转化为文件路径
  21. CatchData=""
  22. end Sub
  23. Private Function GetCFolder
  24. dim FSO,CFolder
  25. Set FSO=CreateObject("Scripting.FileSystemObject")        '设置FSO对象
  26. CFolder=Server.MapPath("/")&"/FileCatch/"
  27. if not FSO.FolderExists(CFolder) then
  28. fso.CreateFolder(CFolder)
  29. end if
  30. if Month(Now())<10 then
  31. CFolder=CFolder&"/0"&Month(Now())
  32. else
  33. CFolder=CFolder&Month(Now())
  34. end if
  35. if Day(Now())<10 then
  36. CFolder=CFolder&"0"&Day(Now())
  37. else
  38. CFolder=CFolder&Day(Now())
  39. end if
  40. CFolder=CFolder&"/"
  41. if not FSO.FolderExists(CFolder) then
  42. fso.CreateFolder(CFolder)
  43. end if
  44. GetCFolder=CFolder
  45. set fso=nothing
  46. End Function
  47. Private Function bytes2BSTR(vIn)        '转换编码的函数
  48. dim StrReturn,ThisCharCode,i,NextCharCode
  49. strReturn = ""
  50. For i = 1 To LenB(vIn)
  51. ThisCharCode = AscB(MidB(vIn,i,1))
  52. If ThisCharCode < &H80 Then
  53. strReturn = strReturn & Chr(ThisCharCode)
  54. Else
  55. NextCharCode = AscB(MidB(vIn,i+1,1))
  56. strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
  57. i = i + 1
  58. End If
  59. Next
  60. bytes2BSTR = strReturn
  61. End Function
  62. Public Function CatchNow(Rev)        '用户指定开始处理Catch操作
  63. if UCase(request.Servervariables("Request_Method"))="POST" then
  64. '当是POST方法,不可使用文件Catch
  65. Rev="使用POST方法请求页面,不可以使用文件Catch功能"
  66. CatchNow=false
  67. else
  68. if request.Querystring(Mark)<>"" then
  69. '如果指定参数不为空,表示请求不可以使用Catch
  70. Rev="请求拒绝使用Catch功能"
  71. CatchNow=false
  72. else
  73. CatchNow=GetCatchData(Rev)
  74. end if
  75. end if
  76. End Function
  77. Private Function GetCatchData(Rev)        '读取Catch数据
  78. Dim FSO,IsBuildCatch
  79. Set FSO=CreateObject("Scripting.FileSystemObject")        '设置FSO对象,访问CatchFile
  80. If FSO.FileExists(CFolder&CFile) Then
  81. Dim File,LastCatch
  82. Set File=FSO.GetFile(CFolder&CFile)        '定义CatchFile文件对象
  83. LastCatch=CDate(File.DateLastModified)
  84. if DateDiff("n",LastCatch,Now())>Overdue then
  85. '如果超过了Catch时间
  86. IsBuildCatch=true
  87. else
  88. IsBuildCatch=false
  89. end if
  90. Set File=Nothing
  91. else
  92. IsBuildCatch=true
  93. End if
  94. If IsBuildCatch then
  95. GetCatchData=BuildCatch(Rev)        '如果需要创建Catch,则创建Catch文件,同时设置Catch的数据
  96. else
  97. GetCatchData=ReadCatch(Rev)        '如果不需要创建Catch,则直接读取Catch数据
  98. End if
  99. Set FSO=nothing
  100. End Function
  101. Private Function GetScriptPath(IsGet)        '创建一个包含所有请求数据的地址
  102. dim Key,Fir
  103. GetScriptPath=ScriptName
  104. Fir=true
  105. for Each key in Request.QueryString
  106. If Fir then
  107. GetScriptPath=GetScriptPath&"?"
  108. Fir=false
  109. else
  110. GetScriptPath=GetScriptPath&"&"
  111. end if
  112. GetScriptPath=GetScriptPath&Server.URLEncode(Key)&"="&Server.URLEncode(Request.QueryString(Key))
  113. Next
  114. if IsGet then
  115. If Fir then
  116. GetScriptPath=GetScriptPath&"?"
  117. Fir=false
  118. else
  119. GetScriptPath=GetScriptPath&"&"
  120. end if
  121. GetScriptPath=GetScriptPath&Server.URLEncode(Mark)&"=yes"
  122. end if
  123. End Function
  124. '创建Catch文件
  125. Private Function BuildCatch(Rev)
  126. Dim HTTP,Url,OutCome
  127. Set HTTP=CreateObject("Microsoft.XMLHTTP")
  128. '                On Error Resume Next
  129. '                response.write ServerHost&GetScriptPath(true)
  130. HTTP.Open "get","http://"&ServerHost&GetScriptPath(true),False
  131. HTTP.Send
  132. if Err.number=0 then
  133. CatchData=bytes2BSTR(HTTP.responseBody)
  134. BuildCatch=True
  135. else
  136. Rev="创建发生错误:"&Err.Description
  137. BuildCatch=False
  138. Err.clear
  139. end if
  140. Call WriteCatch
  141. set HTTP=nothing
  142. End Function
  143. Private Function ReadCatch(Rev)
  144. ReadCatch=IReadCatch(CFolder&CFile,CatchData,Rev)
  145. End Function
  146. Private Sub WriteCatch
  147. Dim FSO,TSO
  148. Set FSO=CreateObject("Scripting.FileSystemObject")        '设置FSO对象,访问CatchFile
  149. set TSO=FSO.CreateTextFile(CFolder&CFile,true)
  150. TSO.Write(CatchData)
  151. Set TSO=Nothing
  152. Set FSO=Nothing
  153. End Sub
  154. End Class
  155. %>

复制代码

文件二:FileCatch-Inc.asp

  1. <%
  2. Function IReadCatch(File,Data,Rev)
  3. Dim FSO,TSO
  4. Set FSO=CreateObject("Scripting.FileSystemObject")        '设置FSO对象,访问CatchFile
  5. '        on error resume next
  6. set TSO=FSO.OpenTextFile(File,1,false)
  7. Data=TSO.ReadAll
  8. if Err.number<>0 then
  9. Rev="读取发生错误:"&Err.Description
  10. ReadCatch=False
  11. Err.clear
  12. else
  13. IReadCatch=True
  14. end if
  15. Set TSO=Nothing
  16. Set FSO=Nothing
  17. End Function
  18. %>
复制代码
 

简易ASP文件缓存技术相关推荐

  1. ASP.NET 缓存技术(一)——启用页面输出缓存

    作者寄语:MSDN 是最好的老师,互联网是最智慧的生命体,分享是最重要的成长途径,技术的进步在于学习.实践和创新! 本系列所讲述的技术和展示的代码适用于 .NET Framework 4.0 和 II ...

  2. ASP.NET 缓存技术分析

    缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓 存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以 ...

  3. 浅谈ASP.NET 缓存技术

    缓存是指系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能构快速的获取数据.它的弊端在于显示的内容可能不是最新,最精确的.ASP.Net 缓存主要分为两大类: 网页输出缓存和应 ...

  4. ASP.NET -- 缓存技术(1)

    缓存应用程序页面和数据     利用缓存,可以极大改善Web应用程序的性能. 一.缓存概述     ASP.NET2.0 Framework支持下面类型的缓存: l         页面输出缓存 l  ...

  5. 【精华】Asp优化之缓存技术

    一.何谓ASP缓存/为什么要缓存 当你的web站点采用asp技术建立的初期,可能感觉到的是asp动态网页技术带来的便利性,以及随意修改性.自如的http控制.但是,随着访问量的增加,你一定会发现自己的 ...

  6. ASP缓存技术(转)

    使用ASP中的缓存技术可以很大程度上提高你的网站性能,其实这些实现方法是非常的简单,它将说明如何在服务器上的缓存是如何工作以及你如何使用一种被称为断开连接的ADO连接技术. 在介绍这些技术之前先说明一 ...

  7. ASP.NE的缓存技术提高Web站点的性能

    一:我们为什么要使用缓存? 先来理解一下asp.net缓存技术的基本原理:把访问频繁的数据以及需要花大量的时间来加载的数据缓存在内存中,那么用户在下次请求同样的数据时,直接将内存中的数据返回给用户,从 ...

  8. 浅谈缓存技术在ASP.NET中的运用

    本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过, 你只需关心Cache即可,具体的架构, ...

  9. [转]ASP.Net缓存总结

    ASP.Net缓存总结 Asp.net 缓存技术总结 2008-04-01 17:29 提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存.Asp.net下的缓存机制十 ...

最新文章

  1. linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
  2. Windows核心编程 第二十章 DLL的高级操作技术
  3. oracle服务器修改机器名,Oracle 11g R2 RAC环境下修改主机名
  4. 在geth客户端调用已部署的智能合约
  5. 本篇文档介绍如何手动在ECS实例上部署Java web项目
  6. php脚本查杀,无敌强大的Shell脚本查杀各种PHP方便之门和Webshell
  7. ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!
  8. ue4材质节点大全_转载于知乎:UE4 多象限(UDIM)贴图在UE4中的应用
  9. 一个关于fixed抖动的小bug
  10. 字符串拼串 能缓解我们的开发难度→!←(ε=(´ο`*)))唉,又是一个不知道该怎么写题目的随笔啊,头疼)...
  11. python open file mode description
  12. 银河水滴张曼:远距离步态识别系统与应用 |量子位沙龙回顾
  13. 阿里巴巴java开发手册 《Java开发手册》v1.5.0 华山版.pdf
  14. 关于EmmyLua插件创建Lua脚本Require失败的问题
  15. 音响发烧友---HiFi音频功放
  16. AR算法原理在计算机视觉中的应用
  17. leetcode 咒语和药水的成功对数
  18. 分享一个能对java代码进行“tokenize”的python库
  19. 2019杭州电子科技大学计算机考研经验——97天一战上岸
  20. 纪念一次面试机试失败的题目:

热门文章

  1. Centos7 配置静态ip地址
  2. ProxySQL Cluster 概述
  3. java左移、右移、无符号右移
  4. Python正则表达式re模块简明笔记
  5. matlab数据序列的几种滤波器
  6. eclipse中更改配置使得switch语句不出错
  7. (转载)Android进阶2之Activity之间数据交流(onActivityResult的用法)
  8. SERV-U FTP SERVER和SERV-U MFT SERVER的区别
  9. 打算尝试瑜伽,看是否能解决长期困扰的胃痛问题
  10. 【Python】spyder编译器调试时添点断点的方法