仅使用global.asa计算活动访问者的特定页面

时间:2011-05-19 04:02:22

标签: asp-classic

使用这样的代码将统计我网站上的活跃访问者。

的global.asa

Sub Application_OnStart
    Application("ActiveUsers") = 0
End Sub

Sub Session_OnStart
    Session.Timeout = 20
    Session("Start") = Now
    Application.Lock
    Application("ActiveUsers") = Application("ActiveUsers") + 1
    Application.UnLock
End Sub

Sub Session_OnEnd
    Application.Lock
   Application("ActiveUsers") = Application("ActiveUsers") - 1
    Application.UnLock
End Sub

我需要的只是一个特定的页面 - 它是等待聊天的列表。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您无法使用global.asa

您必须在该特定页面中编写代码。

增加访问者数量是微不足道的:只需在页面中显示以下代码:

Application.Lock
Application("ChatUsers") = Application("ChatUsers") + 1
Application.UnLock

当有人离开页面时,棘手的部分是减少计数。为此,您必须使用客户端脚本和AJAX:在页面unload事件中触发的客户端脚本将向服务器发送请求,告知其有人离开页面。

最常见也很简单的方法是使用jQuery - 所以.asp中的代码应该可以工作:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
    $(window).bind("unload", function() {
        $.ajax({ url: "<%=Request.ServerVariables("Script_Name")%>", type: "POST", data: "visitor_has_left=true",  async: false });
    });
</script>

这将发送AJAX请求,现在处理它有这样的ASP代码:

<%
If Request.Form("visitor_has_left")="true" Then
    If Application("ChatUsers")>0 Then
        Application.Lock
        Application("ChatUsers") = Application("ChatUsers") - 1
        Application.UnLock
    End If
    Response.End()
Else  
    Application.Lock
    Application("ChatUsers") = Application("ChatUsers") + 1
    Application.UnLock
End If
%>

(它已经结合了代码以增加计数)

现在测试它并且它有效,希望这个概念也很明确。

注意,由于Chrome,我将async设置为false:如果文档在发送请求后立即更改位置,则智能足以取消请求,因此等待响应力甚至Chrome发送期望的请求。