简易ASP文件缓存技术
注意:系统需要FSO权限、XMLHTTP权限
系统包括两个文件,其实可以合并为一个。之所以分为两个是因为部分杀毒软件会因为里边含有FSO、XMLHTTP操作而被认为是脚本木马。
调用时,需要在ASP页面的最上边包含主文件,然后在下边写下以下代码
- Set MyCatch=new CatchFile
- MyCatch.Overdue=60*5 '修改过期时间设置为5个小时
- if MyCatch.CatchNow(Rev) then
- response.write MyCatch.CatchData
- response.end
- end if
- set MyCatch=nothing
复制代码
文件一:FileCatch.asp 的代码
- <!--#include file="FileCatch-Inc.asp"-->
- <%
- '---- 本文件用于签入原始文件,实现对页面的文件Catch
- '---- 1、如果文件请求为POST方式,则取消此功能
- '---- 2、文件的请求不能包含系统的识别关键字
- '---- 3、作者 何直群 (www.wozhai.com)
- Class CatchFile
- Public Overdue,Mark,CFolder,CFile '定义系统参数
- Private ScriptName,ScriptPath,ServerHost '定义服务器/页面参数变量
- Public CatchData '输出的数据
- Private Sub Class_Initialize '初始化函数
- '获得服务器及脚本数据
- ScriptName=Request.Servervariables("Script_Name") '识别出当前脚本的虚拟地址
- ScriptPath=GetScriptPath(false) '识别出脚本的完整GET地址
- ServerHost=Request.Servervariables("Server_Name") '识别出当前服务器的地址
- '初始化系统参数
- Overdue=30 '默认30分钟过期
- Mark="NoCatch" '无Catch请求参数为 NoCatch
- CFolder=GetCFolder '定义默认的Catch文件保存目录
- CFile=Server.URLEncode(ScriptPath)&".txt" '将脚本路径转化为文件路径
- CatchData=""
- end Sub
- Private Function GetCFolder
- dim FSO,CFolder
- Set FSO=CreateObject("Scripting.FileSystemObject") '设置FSO对象
- CFolder=Server.MapPath("/")&"/FileCatch/"
- if not FSO.FolderExists(CFolder) then
- fso.CreateFolder(CFolder)
- end if
- if Month(Now())<10 then
- CFolder=CFolder&"/0"&Month(Now())
- else
- CFolder=CFolder&Month(Now())
- end if
- if Day(Now())<10 then
- CFolder=CFolder&"0"&Day(Now())
- else
- CFolder=CFolder&Day(Now())
- end if
- CFolder=CFolder&"/"
- if not FSO.FolderExists(CFolder) then
- fso.CreateFolder(CFolder)
- end if
- GetCFolder=CFolder
- set fso=nothing
- End Function
- Private Function bytes2BSTR(vIn) '转换编码的函数
- dim StrReturn,ThisCharCode,i,NextCharCode
- strReturn = ""
- For i = 1 To LenB(vIn)
- ThisCharCode = AscB(MidB(vIn,i,1))
- If ThisCharCode < &H80 Then
- strReturn = strReturn & Chr(ThisCharCode)
- Else
- NextCharCode = AscB(MidB(vIn,i+1,1))
- strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
- i = i + 1
- End If
- Next
- bytes2BSTR = strReturn
- End Function
- Public Function CatchNow(Rev) '用户指定开始处理Catch操作
- if UCase(request.Servervariables("Request_Method"))="POST" then
- '当是POST方法,不可使用文件Catch
- Rev="使用POST方法请求页面,不可以使用文件Catch功能"
- CatchNow=false
- else
- if request.Querystring(Mark)<>"" then
- '如果指定参数不为空,表示请求不可以使用Catch
- Rev="请求拒绝使用Catch功能"
- CatchNow=false
- else
- CatchNow=GetCatchData(Rev)
- end if
- end if
- End Function
- Private Function GetCatchData(Rev) '读取Catch数据
- Dim FSO,IsBuildCatch
- Set FSO=CreateObject("Scripting.FileSystemObject") '设置FSO对象,访问CatchFile
- If FSO.FileExists(CFolder&CFile) Then
- Dim File,LastCatch
- Set File=FSO.GetFile(CFolder&CFile) '定义CatchFile文件对象
- LastCatch=CDate(File.DateLastModified)
- if DateDiff("n",LastCatch,Now())>Overdue then
- '如果超过了Catch时间
- IsBuildCatch=true
- else
- IsBuildCatch=false
- end if
- Set File=Nothing
- else
- IsBuildCatch=true
- End if
- If IsBuildCatch then
- GetCatchData=BuildCatch(Rev) '如果需要创建Catch,则创建Catch文件,同时设置Catch的数据
- else
- GetCatchData=ReadCatch(Rev) '如果不需要创建Catch,则直接读取Catch数据
- End if
- Set FSO=nothing
- End Function
- Private Function GetScriptPath(IsGet) '创建一个包含所有请求数据的地址
- dim Key,Fir
- GetScriptPath=ScriptName
- Fir=true
- for Each key in Request.QueryString
- If Fir then
- GetScriptPath=GetScriptPath&"?"
- Fir=false
- else
- GetScriptPath=GetScriptPath&"&"
- end if
- GetScriptPath=GetScriptPath&Server.URLEncode(Key)&"="&Server.URLEncode(Request.QueryString(Key))
- Next
- if IsGet then
- If Fir then
- GetScriptPath=GetScriptPath&"?"
- Fir=false
- else
- GetScriptPath=GetScriptPath&"&"
- end if
- GetScriptPath=GetScriptPath&Server.URLEncode(Mark)&"=yes"
- end if
- End Function
- '创建Catch文件
- Private Function BuildCatch(Rev)
- Dim HTTP,Url,OutCome
- Set HTTP=CreateObject("Microsoft.XMLHTTP")
- ' On Error Resume Next
- ' response.write ServerHost&GetScriptPath(true)
- HTTP.Open "get","http://"&ServerHost&GetScriptPath(true),False
- HTTP.Send
- if Err.number=0 then
- CatchData=bytes2BSTR(HTTP.responseBody)
- BuildCatch=True
- else
- Rev="创建发生错误:"&Err.Description
- BuildCatch=False
- Err.clear
- end if
- Call WriteCatch
- set HTTP=nothing
- End Function
- Private Function ReadCatch(Rev)
- ReadCatch=IReadCatch(CFolder&CFile,CatchData,Rev)
- End Function
- Private Sub WriteCatch
- Dim FSO,TSO
- Set FSO=CreateObject("Scripting.FileSystemObject") '设置FSO对象,访问CatchFile
- set TSO=FSO.CreateTextFile(CFolder&CFile,true)
- TSO.Write(CatchData)
- Set TSO=Nothing
- Set FSO=Nothing
- End Sub
- End Class
- %>
复制代码
文件二:FileCatch-Inc.asp
- <%
- Function IReadCatch(File,Data,Rev)
- Dim FSO,TSO
- Set FSO=CreateObject("Scripting.FileSystemObject") '设置FSO对象,访问CatchFile
- ' on error resume next
- set TSO=FSO.OpenTextFile(File,1,false)
- Data=TSO.ReadAll
- if Err.number<>0 then
- Rev="读取发生错误:"&Err.Description
- ReadCatch=False
- Err.clear
- else
- IReadCatch=True
- end if
- Set TSO=Nothing
- Set FSO=Nothing
- End Function
- %>
简易ASP文件缓存技术相关推荐
- ASP.NET 缓存技术(一)——启用页面输出缓存
作者寄语:MSDN 是最好的老师,互联网是最智慧的生命体,分享是最重要的成长途径,技术的进步在于学习.实践和创新! 本系列所讲述的技术和展示的代码适用于 .NET Framework 4.0 和 II ...
- ASP.NET 缓存技术分析
缓存功能是大型网站设计一个很重要的部分.由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能.可能的情况下尽量使用缓 存,从内存中返回数据的速度始终比去数据库查的速度快,因而可以 ...
- 浅谈ASP.NET 缓存技术
缓存是指系统或应用程序将频繁使用的数据保存到内存中,当系统或应用程序再次使用时,能构快速的获取数据.它的弊端在于显示的内容可能不是最新,最精确的.ASP.Net 缓存主要分为两大类: 网页输出缓存和应 ...
- ASP.NET -- 缓存技术(1)
缓存应用程序页面和数据 利用缓存,可以极大改善Web应用程序的性能. 一.缓存概述 ASP.NET2.0 Framework支持下面类型的缓存: l 页面输出缓存 l ...
- 【精华】Asp优化之缓存技术
一.何谓ASP缓存/为什么要缓存 当你的web站点采用asp技术建立的初期,可能感觉到的是asp动态网页技术带来的便利性,以及随意修改性.自如的http控制.但是,随着访问量的增加,你一定会发现自己的 ...
- ASP缓存技术(转)
使用ASP中的缓存技术可以很大程度上提高你的网站性能,其实这些实现方法是非常的简单,它将说明如何在服务器上的缓存是如何工作以及你如何使用一种被称为断开连接的ADO连接技术. 在介绍这些技术之前先说明一 ...
- ASP.NE的缓存技术提高Web站点的性能
一:我们为什么要使用缓存? 先来理解一下asp.net缓存技术的基本原理:把访问频繁的数据以及需要花大量的时间来加载的数据缓存在内存中,那么用户在下次请求同样的数据时,直接将内存中的数据返回给用户,从 ...
- 浅谈缓存技术在ASP.NET中的运用
本篇文章虽不谈架构,但是Cache又是架构中不可或缺的部分,因此,在讲解Cache的同时,将会提及到部分架构知识,关于架构部分,读者可以不用理解,或者直接跳过, 你只需关心Cache即可,具体的架构, ...
- [转]ASP.Net缓存总结
ASP.Net缓存总结 Asp.net 缓存技术总结 2008-04-01 17:29 提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存.Asp.net下的缓存机制十 ...
最新文章
- linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
- Windows核心编程 第二十章 DLL的高级操作技术
- oracle服务器修改机器名,Oracle 11g R2 RAC环境下修改主机名
- 在geth客户端调用已部署的智能合约
- 本篇文档介绍如何手动在ECS实例上部署Java web项目
- php脚本查杀,无敌强大的Shell脚本查杀各种PHP方便之门和Webshell
- ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!
- ue4材质节点大全_转载于知乎:UE4 多象限(UDIM)贴图在UE4中的应用
- 一个关于fixed抖动的小bug
- 字符串拼串 能缓解我们的开发难度→!←(ε=(´ο`*)))唉,又是一个不知道该怎么写题目的随笔啊,头疼)...
- python open file mode description
- 银河水滴张曼:远距离步态识别系统与应用 |量子位沙龙回顾
- 阿里巴巴java开发手册 《Java开发手册》v1.5.0 华山版.pdf
- 关于EmmyLua插件创建Lua脚本Require失败的问题
- 音响发烧友---HiFi音频功放
- AR算法原理在计算机视觉中的应用
- leetcode 咒语和药水的成功对数
- 分享一个能对java代码进行“tokenize”的python库
- 2019杭州电子科技大学计算机考研经验——97天一战上岸
- 纪念一次面试机试失败的题目: