Fdream's Blog
专注于WEB前端开发
Powered by Google

也讨论一下ASP在线人数统计(二)

15 晴天 2005-12
Fdream 发表于 Ajax Web, 已被阅读 31694 次, 评论 7 条
关键词:ASP 在线统计 源码
[ 阅读字体大小: ]

第三种方法和这个类似,只不过是根据用户的 IP 来判断在线人数,这样就避免了三面的特殊情况,而且不需要用 session 哦!

首先还是建一个数据库:count.mdb,包含一个表:count,表中字段为:

引用内容:

ID 自动编号

ip 文本

posttime 日期/时间

具体实现代码如下,文件名为 online.asp:

[#afdream.com#]

引用内容:

<%

'---------定义变量

dim rs

dim ip

dim timeouted

dim x

dim conn

dim dbpath

'---------定义变量结束

'---------建议数据库链接

set conn=server.cr&#101;ateobject("adodb.connection")

DBPath = Server.MapPath("count.mdb")

conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

'---------建立数据库链接完成

'---------新建数据库RS对象

set rs = server.cr&#101;ateobject("adodb.recordset")

'---------建立数据库RS对象完成

'---------读取客户端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="sel&#101;ct ip from count wh&#101;re posttime >= dateadd('n',-20,now()) group by ip"

rs.Open sql,conn,1,1

online=rs.RecordCount

rs.Close

'---------得到在线人数值

'---------查看数据库中是否已经有相同的值,没有则 x="yes"有则x="no"

sql="sel&#101;ct ip from count wh&#101;re ip='" & ip & "'"

rs.Open sql,conn,1,1

if rs.eof and rs.bof then

x="yes"

else

x="no"

end if

rs.close

'--------判断完毕

'--------如果数据库中没有相同的值则加入一个新值

if x="yes" then'   如果没有这个IP则增加一条记录

sql="sel&#101;ct top 1 * from count"

rs.Open sql,conn,1,3

rs.AddNew

rs("ip")=ip

rs("posttime")=now()

rs.up&#100;ate

rs.close

else   '如果有这个IP则把时间改为现在的时间

sql="sel&#101;ct * from count wh&#101;re ip='" & ip & "'"

rs.Open sql,conn,1,3

rs("posttime")=now()

rs.up&#100;ate

rs.close

end if

'--------判断加入完毕

'--------删除20分钟以前所加入的值

timeouted = dateadd("n", -20, now())

sql="del&#101;te * from count wh&#101;re posttime < #" & timeouted & "#"

conn.Execute sql

'--------删除完毕

'--------关闭数据对象

set rs=nothing

conn.Close

set conn=nothing

%>

document.write("共<%=online%>人在线")

调用方式如下,在你要显示的地方插入如下代码(注意路径一定要写对哦!):

引用内容:

<script language=“javascript” src=“online.asp”></script>

Related articles 您可能对这些文章也感兴趣:
Related comments 与该文相关的评论:(我也想说几句)
引用这个评论  34t3eg 于 10/18/2006 7:43:04 AM 发表评论: 

花摘了许久枯萎了也舍不得丢,伞撑了许久雨停了也记不起收,路走了许久天黑了也走不到尽头,百年难得一见的贴子要天天顶才不会沉,有句话想了很久清楚了,才说出口:文章写的真好!

音乐下载

音乐下载

音乐下载

花摘了许久枯萎了也舍不得丢,伞撑了许久雨停了也记不起收,路走了许久天黑了也走不到尽头,百年难得一见的贴子要天天顶才不会沉,有句话想了很久清楚了,才说出口:文章写的真好! 音乐下载 [url=http://www.mp3goto.net]音乐下载[/url] 音乐下载
引用这个评论  Tetto 于 4/18/2006 12:14:31 AM 发表评论: 

博客做得不错啊

//发这种链接是没有用的!

博客做得不错啊 //发这种链接是没有用的!
引用这个评论  lcy 于 3/20/2006 3:41:12 PM 发表评论: 

//masked by Fdream

//masked by Fdream
引用这个评论  lcy 于 3/20/2006 3:39:15 PM 发表评论: 

//masked by Fdream

//masked by Fdream
引用这个评论  Fdream 于 2/15/2006 6:09:39 PM 发表评论: 

呵呵,偶也知道查询数据库不爽,就是没想到你的这个方法!太好了!

呵呵,偶也知道查询数据库不爽,就是没想到你的这个方法!太好了!
引用这个评论  ahuaxz 于 2/15/2006 5:31:34 PM 发表评论: 

'---------读取客户端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的值为空,则得到他的本地客户端地址

这个很赞!我原先都没有考虑的![biggrin]

'---------读取客户端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的值为空,则得到他的本地客户端地址 这个很赞!我原先都没有考虑的![biggrin]
引用这个评论  ahuaxz 于 2/15/2006 5:30:12 PM 发表评论: 

在线用户统计最好不要每次请求页面都查询数据库,这样会增加服务器负担。

我的作法是根据IP为每个用户建立一条Application级别的缓存,缓存中保存登陆时间,IP,访问页面URL等等信息,只有当用户首次登陆网站才向数据库插入进站记录,以后只要查询这条缓存就可以了。

代码:http://www.cloudward.net/blog/blogview.asp?logID=459

在线用户统计最好不要每次请求页面都查询数据库,这样会增加服务器负担。 我的作法是根据IP为每个用户建立一条Application级别的缓存,缓存中保存登陆时间,IP,访问页面URL等等信息,只有当用户首次登陆网站才向数据库插入进站记录,以后只要查询这条缓存就可以了。 代码:http://www.cloudward.net/blog/blogview.asp?logID=459
Add a comment 我来说两句: 
禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
表  情
arrow
用户名:   密码:  (匿名可不写) 同时注册?
验证码:   看不清?换个图片  看不清楚?换个图片

 
Copyright © 2005-2008,Fdream All Rights Reserved
Processed in 0.1718772 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号