谁在站上的应用

好的站长都有一个很明确的目的，那就是，希望更多的访问者进入他的站点。那么，如果能够了解当前有多少用户在站上以及在作什么就十分有必要了，这样可以根据观察的信息来完善自己的站点。

现在这个示例就是实时的统计当前访问者以及每一个访问者刚进行的主页请求。

见下面显示结果图17.5：

图17.5 谁在线上

这个示例说明了怎样将一个对象赋值给一个application对象，一个字典对象用来储存访问者信息，当访问者发出了一个请求，这个对象就进行了更新，下面是这个应用所需要制作和修改的文件列表：

■Global.asa文件：针对这个应用Application_OnStart事件和Application_OnEnd事件都需要进行修改。

■GrabStates文件:：这个文件更新Dictionary对象，你需要在每一个想要跟踪的ASP文件首包含这个脚本。

■WhosOn页：就是显示目前站上用户以及目前状态。

修改Global.asa文件

做这个应用项目，你需要修改两个脚本，首先是创建一个Dictionary对象，用来存储访问者信息，由于这个对象的创建只需要一次，那么可以在application_OnStart事件中进行：

<SCRIPT LANGUAGE=VbScript RUNAT=Server>

SUB Application_OnStart

Set Application(

“Stats”)=Server.CreateObject(“Scripting.Dictionary”)

END SUB

</SCRIPT>

只是添加了一句脚本语言。这个语句将新创建的一个Dictionary事例赋值给名字为stats的application变量，创建之后，在整个应用中就可以一直使用了。

注意

在application的范围内创建对象的更多方法将在下一章中有详尽的讨论。

在一个用户的Session结束时，我们必须把他的信息清除，这就需要修改Session_OnEnd对象：

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

SUB Session_OnEnd

IF Application(

“Stats”).Exists(Session.SessionID) THEN

Application.Lock

Application(

“Stats”).Remove(Session.SessionID)

Application.UnLock

END IF

END SUB

</SCRIPT>

用户将根据他们的SessionID来被跟踪，字典中的名字为stats的键与相应的Session Ids相对应，首先检查字典中是否有有关这个已经离开的SessionID的信息，如果有，则进行删除（因为这个用户Session已经结束了）

创建GrabStats文件

想要决定当前页的浏览者，就必须在每一个要进行跟踪的页面前包含一个脚本文件。这个文件其实只有一行语句，见例子17.4。

例子17.4 GrabStats.asp

<%

Application(

“Stats”).item(“Session.SessionID)=Request.ServerVariables(“SCRIPT_NAME”)

%>

这个脚本将当前页的路径加入到Dictionary对象中去。当前路径依然是通过ServerVariable变量获得。然后，该变量值赋值给字典中对应当前用户ID的键中（如果不存在，则自动创建。）

将该脚本存为GrabStats.asp之后，那么在你需要进行跟踪的ASP文件首行加入这么一句代码<!--#INCLUDE VIRTUAL=

”GrabStats.asp” à

创建显示谁在站上的页面

这个主页就是显示当前使用者。显示的是每一个使用者的SessionID和他的最后一次请求的页面，下面是这个显示页面的全部代码：

例17.5 WhosOn.asp

<!-- #INCLUDE VIRTUAL=

”GrabStats.asp” -->

<%

MyServer=Request.ServerVariables(

“SERVER_NAME”)

MyPath=Request.ServerVariables(

“SCRIPT_NAME”)

MySelf=

”Http://”&MyServer&MyPath

%>

<HTML>

<HEAD>

<META HTTP-EQUIV=

”REFRESH” CONTENT=”20;<%=MySelf%>”>

<TITLE>迈至科谁在站上应用示例之显示页</TITLE>

</HEAD>

<BODY>

<% Application.Lock

Set TempStats=Application(

“Stats”)

Application.Unlock

%>

<Center>

当前访问者一共<%=TempStats.Count %>个

<table Border=1 cellspacing=10>

<tr><th>访问者ID</Th><th>当前访问页</th></tr>

<%

TempItems=TempStats.Items

TempKeys=TempStats.Keys

For I=0 to UBOND(TempKeys)

%>

<tr><td><%=tempKeys(i) %></td><td><%=TempItems(i) %></td></tr>

<% next %>

</center>

</table>

</Body>

</Html>

第一行包含的文件GrabStats.asp就是前面的那一部分所创建的，也就是说，该主页的访问情况也在跟踪统计之内。第一个脚本就是接受当前路径，没有什么可以再解释的，只是这次更新时间改为20秒而已。

第二个脚本是将application的字典对象变量存在一个临时的TempStats字典对象中，这个对象会在该页结束时自动清除。后面的脚本则是循环显示所有的键和值。显示结果见本节部分的图17.5。

扩展这种应用

这种应用示例对于了解自己的网站访问情况是很有好处的，你可以了解当前网站上的访问者，也可以了解他们在浏览哪方面的内容。

有很多种方式来使这种应用功能更加完备，例如，想要从SessionID中了解用户信息太难了，如果你的网站有注册登录界面，那么在字典对象中完全可以用登录名来代替毫无表达意义的ID值。

另外，你完全可以跟踪用户访问的时间长度，这种对脚本的修改也不算复杂，例如，你只需要建立第二个application变量来包含另一个字典对象，专门存储用户停留时间的信息。

注意

相关示例展示可以参见http://www.aspsite.com

总结

在这章中，你应当学会了Active Server Pages的application应用，首先是全面了解， 然后学会使用它的集合，属性以及事件。最后是两个有代表性的实例，这样你应当对一些比较高级的ASP应用有所了解并能够提升你的网站的制作档次。