使用这样的代码将统计我网站上的活跃访问者。
的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
我需要的只是一个特定的页面 - 它是等待聊天的列表。
答案 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发送期望的请求。