用ASP编写计数器

  在网友们编写的主页之中,一般都要用计数器来统计访问量。对于计数器的编写可谓经历了几代的发展,从最初Unix上的CGI到现今Microsoft的ASP,其编程的思想越来越先进,而实现的方法却越来越简单。当初我用Perl语言写计数器时真是费尽心力,现在使用VBScript结合ASP对象很容易就编写出漂亮的计数器了。这里我想通过实例来讲讲服务器端的编程要点和ASP的两个重要对象:Application对象和FileSystemObject对象。
  请看第一个count.asp
  <%
  ′将服务器上的虚拟路径转化为真实路径
  countFile=server.mapPath(″/″)&″\″&″count.txt″
  ′创建FileSystemObject对象的实例
  set fso=Server.CreateObject(″Scripting.FileSystemObject″)
  ′打开count.txt
  set file=fso.OpenTextFile(″countFile″)
  ′用readLine方法读取保存的访问数并赋给number
  number=file.readLine
  ′访问数加1
  number=number+1
  ′显示访问数
  response.Write(″你是第″&number&″位访问者!″)
  ′将新的访问数写回count.txt文件
  set file=fso.createTextFile(″countFile″,true)
  file.writeLine(number)
  ′关闭文件
  file.close
  %>   当客户端提出对count.asp的浏览请求时,该asp程序执行,从服务器上读出count.txt文件内保存的访问数赋给number变量,将number加一然后显示出来,再写回到count.txt文件中。但若有几人同时请求该页时就会发生错误,而且每次请求服务器端均进行一次文件读写,在访问量加大时就会给服务器带来严重的负担,那么有没有效率更高的方法呢?答案是肯定的,ASP提供了一个叫作Application的内部对象。将变量赋与Application作用域,存储到Application对象中,这样所有的用户均可访问该变量。当Web服务器(IIS或PWS)启动后,在第一次请求页面时将触发Application_onStart()事件,当服务器关闭时将触发Application_onEnd()事件。注意,OnStart与onEnd事件需写在一个名为Global.asa的文件中(可用写字本创建,并且一定要与count.asp放在同一目录下)。好了,请看改进后的计数器范例。
  Global.asa文件:
  <Script language =″Vbscript″ Runat=″server″>
  sub Application_onStart()
  countFile=server.mapPath(″/″)&″\″&″count.txt″
  set fso=Server.CreateObject(″Scripting.FileSystemObject″)
  set file=fso.OpenTextFile(″countFile″)
′读取访问数并赋给Application变量number
  Application(″number″)=file.readLine
  file.close
  end sub
  sub Application_onEnd()
  countFile=server.mappath(″/″)&″\″&″count.txt″
  set fso=Server.CreateObject(″Scripting.FileSystemObject″)
  set file=fso.CreateTextFile(″countFile″,true)
  ′使用writeLine方法写入当前值
  file.writeLine(Application(″number″))
  file.close
  end sub
  </script>
  以上就是Global.asa的全部内容,下面是count.asp的内容,它很简单,就是将Application(″number″)的值加一并显示出来就行了,为了避免多用户同时对Application(″number″)的值进行操作而导致混乱,采用Lock和Unlock方法。
  count.asp程序:
  <%
  Application.Lock
  Application(″number″)=Application(″number″)+1
  Applicaiotn.Unlock
  response.Write(″你是第″&number&″位访问者!″)
  %>
  这样,这个计数器已经比较完善了。

        上文详细的说明了如何利用流行的ASP来编写计数器,该文通过使Application.Lock和Applicaiotn.Unlock解决了多用户同时访问站点,计数器只能加1的问题,但是,如果某个用户,反复点击“刷新”按钮,那么计数器还是要不断的增加的,这样对于网站点击率评比来说是不公平的。
要防止上网用户连续按下“刷新”,最好的办法就是利用ASP的Session对象,我们可以借助Session对象首先判断该用户是否为新连接者,如果是,那么
IsEmpty(Session("hasbeenConnected"))=True,也就是说,Session("hasbeenConnected")是空的。那么,运行程序,使计数器加1,然后将该用户的Session("hasbeenConnected")设置为True,也就是说,这个用户已经不是新的连接者,无论他怎么连续按下“刷新”按钮,计数器也不会再增加。
结合《 用ASP编写计数器 》一文,最后的站点计数器count.asp程序应该是:
  
<%
If IsEmpty(Session("hasbeenConnected")) then
   Application.Lock
   Application("number")=Application("number")+1
   Applicaiotn.Unlock
   response.Write("你是第"&number&"位访问者!")
  End If
Session("hasbeenConnected")=True
 %>



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 792
发表评论
昵 称: 注册帐号 密码: 游客直接输入昵称不需要密码
内 容:
验证码: 验证码