AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > ASP编程

用ASP制作计数器

51自学网 http://www.51zixue.net
    现在许多网站都有计数器, 您也许也很想拥有一个自己制作的计数器, 其实利用ASP您可以轻而易举地制作出自己的计数器。 不需要太多的专业知识,只要懂一点点HTML,Now, let's begin。

    First, 我想先介绍一下ASP的内建(built-in)对象Application。Application对象用来存储变量或对象, 以便在网页再次被访问时(不管是不是同一个连接者或访问者), 所存储的变量或对象的内容还可以被重新调出来使用, 也就是说Application对于各个连接者和同一网站的asp文件来说是公用的。

其存储的语法为:
        Application("变量名")=变量名         或         Set Application("对象名")=对象名
其调出的语法为:
        变量名=Application("变量名")         或         Set 对象名=Application("对象名")
为了简便, 我们还可以把Application("变量名")直接当作变量来使用。

    计数器不就是服务器每次向客户机的浏览器传送网页时在网页中加1嘛, 很简单, 假设我们用变量Num来计数, 则在asp文件中加入语句:“Application("Num")=Application("Num")+1”即可, 如下边的例子。

例1 计数器测试版
<html>
<head>
<title>计数器测试版</title>
</head>
<body>
<p align="center">您是本网站的第
<font color="blue">
<%
Application("Num")=Application("Num")+1
Response.Write Application("Num")
%>
</font>
位访问者</p>
</body>
</html>


    就这么简单? Of course not。在程序访问共享变量时, 必须进行进程互斥, 否则将发生"与时间有关的错误",也就是进程同步问题。举例来说, 当有两个或两个以上的用户同时访问例1中的asp文件时, 它们同时让Application("Num")加1, 例如此时Application("Num")等于6, 两个或两个以上的用户同时访问后, Application("Num")的值却只是加了1(因为自增是在客户机分别运行的), Application("Num")等于7, 造成少加的错误, 导致计数语句Application("Num")=Application("Num")+1存储的访问者数将不再是准确的了。现在我们来改进一下, 使用Application对象的 "Lock" 和 "UnLock" 来解决这个问题, 请看例2。

例2 计数器改进版
<html>
<head>
<title>计数器改进版</title>
</head>
<body>
<p align="center">您是本网站的第
<font color="blue">
<%
Application.Lock
Application("Num")=Application("Num")+1
Response.Write Application("Num")
Application.UnLock
%>
</font>
位访问者</p>
</body>
</html>


    Application.Lock是锁定对象Application, 使得除了正在访问此变量的用户(或正在运行的进程)外的其它用户(或进程)不能在此时同时访问它, 而Application.UnLock是在对Application("Num")进行修改后, 解除对Application对象的锁定。这样, 就不会出现"与时间有关的问题了", 从而达到进程互斥的目的,也就解决了上述问题。

    但是, 新的问题随之迩来, Application对象是有时间限制的(默认是20分钟), 当超过限制的时间或服务器关机时, Application所记录的访问者数都会消失, 您的工作就前功尽弃了。所以,单纯依靠Application是不行的,该怎么办呢? 请看下集……

<

 

 

 
上一篇:关于ASP智能搜索的实现  下一篇:ASP连接SQL&nbsp;Server2000数据库例程