微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用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
  %>
  <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(counter_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与我交流!