用ASP编写计数器
Application("变量名称")??=变量名称Set Application("对象名称") =对象名称
而下次网页重新启动时,则使用以下语句将变量(对象)的内容还原回来:
变量名称=Application("变量名称")??
Set 对象名称=Application("对象名称")??
如果觉得编写以上的语句很烦,可以直接把Application("变量名称")当成变量使用,如:
Application(counter")=Application("counter")+1
其作用相当于counter=counter+1, 所不同是Application对象的生命周期不会受限于网页的生命周期,所以Application("counter")的值在网页结束时还保留着。
假设我们提前将访问计数器存放在Application("counter")里面, 那么首页被启动一次,我们就将Application"counter"加1,这样就可以达到累计访问计数器的目的:
<%
Application("counter")= Application("counter")+ 1
%>
<html>
<head>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<h2 align="center">访问计数器 - count1.asp</h2>
<hr>
<p align="center">您是本站点第<%=Application"counter"%>位贵宾!</p>
</body>
</html>
其实以上程序并不能完全正确地访问计数器,因为以上程序执行有三个步骤:
1.读取Application("counter")的值。
2.将读取的值加1。
3.将加1之后的值返回Application("counter")。
如果有两位上网者同时启动网页,并且同时执行了以上的步骤1,那么他们所读取的值相同(假设等于100),接着虽然也都执行了步骤2、3把加1的结果相加Application("counter")而得到101的结果,但实际上却少加了一次。
怎样解决这个问题呢?那就是不让任何两位上网者同时执行以上的程序,而要避免这个事情的发生,只要把程序改成:
Application.Lock '锁定Application对象
Application.("counter")=Application("counter")+1
Application.unlock '解除Application对象的锁定
当某一程序执行了Application.Lock之后,其他程序便暂时不能使用Application对象,直到Application对象被解除锁定为止,所以我们把访问计数器加一的语句放在Application.Lock及Application.UnLock之间,便不会有计数器少加的情况发生了。
但是Application也不是无限期的,当服务器IIS/PWS关闭时,所累计的人次就会化为乌有。要克服这个问题,我们可以将访问计数器写到文件中,我写了一个Counter子程序,用途就是访问计数器写入到文件中,以上程序改成:
<%
Sub IncrementCounter?煟?
' 建立一个FileSystemObject对象
Set fs = Server.CreateObject"Scripting.FileSystemObject"??
counter_file = Server.MapPath("counter.txt")??
' 启动counter.txt文件,并且读取记录在文件中的counter
Set txt = fs.OpenTextFile(counter_file) ??
Application("counter")= txt.ReadLine
txt.Close
' 将计数器加1
Application("counter")= Application("counter") + 1
' 将计数器写入counter.txt文件中
Set txt = fs.CreateTextFile?煟╟ounter_file,True)??
txt.WriteLine(Application("counter"))?牐?
txt.Close
End Sub
Application.Lock
IncrementCounter ' 将访问计数器加1并写入到文件中
Application.UnLock
%>
<html>
<head>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<h2 align="center">访问计数器 - count3.asp</h2>
<hr>
<p align="center">您是本站第 <%=Application"counter"%> 位贵宾!</p>
</body>
</html>
以上制作的访问计数器是以文字来输出的,如果我们想显示图形的访问计数器,只要把计数器的数值转换成图形计数器的HTML标记即可。
首先必须准备好0~9共10个阿拉伯数字的图形文件,接下来的工作是编写程序将数值转换成图形的HTML标记:
<%
Application.Lock
Application("counter")= Application("counter")+ 1
Application.UnLock
Function GCounter(counter)??
Dim S,i,G
S = CStr(counter)'先将数值转换成字符串
'逐个取字符串S的每个字节,然后串成<IMG SRC=?.gif>图形标记
For i = 1 to Len(S)
G = G & "<IMG SRC=" & Mid(S,i,1)& ".gif Align=TextTop>"
Next
GCounter = G
End Function
%>
<html>
<head>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<h2 align="center">访问计数器 - gcount.asp</h2>
<hr>
<p align="center">您是本站第 <%=GCounter(Application("counter"))%> 位贵宾!</p>
</body>
</html>
到此为止,计数器完整的制作过程介绍完了,还不错吧!如你也是ASP的爱好者,请来信yjtom@yeah.net与我交流!