用ASP编写计数器 杨俊 2001年 12期 首先我们应该知道计数器的原理是在上一次的数量上加1的一个过程,也就是说将ASP文件结束执行之后,能够把变量(对象)的内容记录下来。我们可以用下列语句将变量(对象)的内容储存在Application对象之中:    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    %>                  

访问计数器 - count1.asp

  
  

您是本站点第<%=Application"counter"%>位贵宾!

         其实以上程序并不能完全正确地访问计数器,因为以上程序执行有三个步骤:    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(counter_file,True)    txt.WriteLine(Application("counter"))    txt.Close    End Sub    Application.Lock    IncrementCounter ' 将访问计数器加1并写入到文件中    Application.UnLock    %>                  

访问计数器 - count3.asp

  
  

您是本站第 <%=Application"counter"%> 位贵宾!

         以上制作的访问计数器是以文字来输出的,如果我们想显示图形的访问计数器,只要把计数器的数值转换成图形计数器的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的每个字节,然后串成图形标记    For i = 1 to Len(S)    G = G & ""    Next    GCounter = G    End Function    %>                  

访问计数器 - gcount.asp

  
  

您是本站第 <%=GCounter(Application("counter"))%> 位贵宾!

         到此为止,计数器完整的制作过程介绍完了,还不错吧!如你也是ASP的爱好者,请来信yjtom@yeah.net与我交流!