Asp classic 仅针对特定页面使用global.asa统计活动访问者

Asp classic 仅针对特定页面使用global.asa统计活动访问者,asp-classic,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

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

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

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

在这种情况下,您不能使用
global.asa

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

增加访客数量很简单:只需在页面中添加以下代码:

Application.Lock
Application("ChatUsers") = Application("ChatUsers") + 1
Application.UnLock
棘手的部分是当有人离开页面时减少计数。为此,您必须使用客户端脚本和AJAX:page
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({url:,键入:“POST”,数据:“visitor\u has\u left=true”,async:false});
});
这将发送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
%>
0那么
应用程序。锁
应用程序(“聊天用户”)=应用程序(“聊天用户”)-1
Application.UnLock
如果结束
答复:End()
其他的
应用程序。锁
应用程序(“聊天用户”)=应用程序(“聊天用户”)+1
Application.UnLock
如果结束
%>
(它已经合并了代码以增加计数)

现在刚刚测试过,效果很好,希望概念也很清楚


注意,由于Chrome,我将
async
设置为
false
:如果文档在发送请求后立即更改了位置,则可以取消请求,因此等待响应强制Chrome发送所需请求。

谢谢@Rory,希望它也能帮助OP。:)@暗影巫师:答案很棒,我很快就会试试。。。谢谢-答案很清楚,很好!干杯@Y.G.J希望你不会遇到任何问题。。顺便问一下,你的头像是什么意思?无法解决此问题:)@阴影向导。。。你是真的吗?这是我(我的照片在photoshop中的邮票版)和以色列flag@Y.G.J哈哈,我从经验中知道这面旗子,但乍一看,它看起来像是被烧掉了什么的,然后我意识到这是一个人的画,但仍然不确定是什么陷阱。这是你自己干的吗?