asp检测 记录在线时长 在线时间
举例而言:
必须设置一个活动时间隔,比如设为10分钟。第一次监控到用户浏览页面时间为起始时间,在线上活动如果10分钟后该用户不再刷新页面则认为其已经离线,则以最后一次刷新页面记录下的时间为统计该用户的网站活动的截止时间。则两者间的差值做为一次活动时间。
不必在所有页面放统计功能,只要放在几个主要大浏览量类别的页面即可。
可以用js角本调用统计代码,以一定的时间间隔以ajax方式在不刷新当前页面的情况更新用户活动的截止时间。这样只要用户不关闭浏览器、不刷新页面也可以监控到其在线的数据。
<iframe src= “online.asp ” frameborder=0 width=0 height=0>
online.asp:
—————————————–
<!--#include file= "conn.asp " -->
<%
sqlstr= "Update users SET onlinetime= ' "& now & " ' Where userid= ' "& session( "userid ")& " ' "
conn.execute sqlstr
%>
<HTML>
<HEAD>
<META HTTP-EQUIV= "Refresh " CONTENT= "120 ">
</HEAD>
</HTML>
方案1
原理:每个网页都包含conn.asp数据库连接页,所以把要统计的放到这个页比较好。
这样只要你打开网页,那么这个网页上就有一个隐藏的定时刷新的iframe,这个页定时的把用户的在线状态写在表里,以达到统计时间的目的
最近看网上有关于这种方法的问题反馈说在本地可以正常运行,在服务器上却不行,那人说自己解决问题了,就这个iframe 放到head里。
conn.asp每个页都有,所以把这个隐藏iframe加到这里
<iframename="Detail"id="Detail"frameborder="0"hspace="0"vspace="0"src="refresh.asp"style="display:none"></iframe>
refresh.asp是定时刷新页,
<METAhttp-equiv=refreshcontent=300>
<METAhttp-equiv=Pragmacontent=no-cache>
<METAhttp-equiv=Content-Typecontent="text/html; charset=gb2312">
<%
If session("username")<>""Then
If session("refreshtimes")<>""Then
If DateDiff("n", session("refreshtimes"), Now())>1Then
'*********************************************************************
SqlDbHost ="127.0.0.1"'修改实际的数据库服务器地址
SqlDbName ="SqlDbName"'修改为实际的数据库名
SqlUserName ="SqlUserName"'修改为实际的数据库用户名
SqlUserPass ="SqlUserPass"'修改为实际的数据库密码
'*********************************************************************
Set conn = Server.CreateObject("ADODB.Connection")
connstr ="Provider=SQLOLEDB.1; Persist Security Info=True; Data Source="& SqlDbHost &"; Initial Catalog="&SqlDbName&"; User ID="&SqlUserName&"; Password="& SqlUserPass
conn.Open connstr
conn.Execute("update users set OnlineTimes=OnlineTimes + "&DateDiff("n", session("refreshtimes"), Now())&" where username='"&session("username")&"'")
session("refreshtimes")= Now()
EndIf
Else
session("refreshtimes")= Now()
EndIf
EndIf
%>