ASP中统计在线人数的方法花样繁多,我也搞不清楚有几种 ^_^,偶这里介绍三种先,如有错误,欢迎各位批评指正,还有好方法,敬请补充!
首先介绍一种最简单的方法,利用 Application、 session 和 Global.asa ,因为当用ASP制作的网页都存放与WWW服务器的基点目录并且WWW服务器启动之后,每当有对ASP文件的HTTP请求时,服务器都会去读取基点目录下的Global.asa文件。所以可以在 Global.asa 文件中包含如下代码:
<%
'---------定义变量
dim rstj
dim ip
dim timeouted
dim x
dim conntj
dim dbpath
'---------定义变量结束
'---------建议数据库链接
set conntj=server.createobject("adodb.connection")
DBPath = Server.MapPath("count.mdb")
conntj.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
'---------建立数据库链接完成
'---------新建数据库rstj对象
set rstj = server.createobject("adodb.recordset")
'---------建立数据库rstj对象完成
'---------读取客户端IP地址
ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") '若是对方使用的是代理服务器上网的话,用Request.ServerVariables("HTTP_X_FORWARDED_FOR")可以得到对方的真实IP,若对方不是通过代理服务器上网的话,则IP的值为空
If ip = "" Then ip = Request.ServerVariables("REMOTE_ADDR") '如果IP的值为空,则得到他的本地客户端地址
'---------IP读取完毕
'---------读出数据库内近20分钟所加入的新内容数,group by ip-表IP值相同的记作1
sql="select ip from count where posttime >= dateadd('n',-20,now()) group by ip"
rstj.Open sql,conntj,1,1
online=rstj.RecordCount
rstj.Close
'---------得到在线人数值
'---------查看数据库中是否已经有相同的值,没有则 x="yes"有则x="no"
sql="select ip from count where ip='" & ip & "'"
rstj.Open sql,conntj,1,1
if rstj.eof and rstj.bof then
x="yes"
else
x="no"
end if
rstj.close
'--------判断完毕
'--------如果数据库中没有相同的值则加入一个新值
if x="yes" then' 如果没有这个IP则增加一条记录
sql="select top 1 * from count"
rstj.Open sql,conntj,1,3
rstj.AddNew
rstj("ip")=ip
rstj("posttime")=now()
rstj.update
rstj.close
else '如果有这个IP则把时间改为现在的时间
sql="select * from count where ip='" & ip & "'"
rstj.Open sql,conntj,1,3
rstj("posttime")=now()
rstj.update
rstj.close
end if
'--------判断加入完毕
'--------删除20分钟以前所加入的值
timeouted = dateadd("n", -20, now())
sql="delete * from count where posttime < #" & timeouted & "#"
conntj.Execute sql
'--------删除完毕
'--------关闭数据对象
set rstj=nothing
conntj.Close
set conntj=nothing
%>
document.write('当前人在线<%=online%>人');
调用方式如下,在你要显示的地方插入如下代码(注意路径一定要写对哦!):
<script language=“javascript” src=“online.asp”></script>