当前位置: 首页 > 图文教程 > 网络编程 > ASP > 被动式统计网站在线人数

ASP
asp生成三维饼图的函数
ASP下的简洁的多重查询的方法与函数 真不错
发一个ASP的ADODB类代码
A利用ASP小偷和Google实现在线翻译功能的代码
ASP类型网站结合动网论坛会员的方法
Asp下实现多表单域无组件文件上传的实例
asp制作中常用到的函数库集合
易心asp分页类 v1.0
asp中xmlhttp组件发包
检测是否为数字类型的asp代码
可以获得文件的文件名的asp函数
用asp实现访问远程计算机上MDB access数据库文件的方法
用ASP实现写IIS日志的代码
asp在IE浏览器中下载服务端上的各类文件的实现方法
asp汉字中文图片验证码的实现代码
asp WAP获取手机终端信息的一段代码
asp取得数组中的最大值的方法
用asp实现的截取指定格式字符串的代码
asp jmail发邮件 详细解析
ASP编程中连接数据库和数据库操作的常用代码

ASP 中的 被动式统计网站在线人数


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 71 ::
收藏到网摘: n/a

在学校里不能上网时,没事做就改了下blog程序,加上了个blog在线人数统计。在此之前也看了几种统计在线人数的代码,感觉都不太符合自己的要求,就结合blog程序自己写了一个,应用到我的blog上。

在Fdream的blog里提到了一些关于ASP统计在线人数的方法,具体可以看这里

为了兼顾准确率与效率,我采用了被动的方式来统计在线人,即当有新访客时才更新在线人数。不知道网上有没有已经有人使用了这种方法,不过我现在用的完全是自己想的^_^。

在L-Blog中采用Session来判断访客是否为新访客。Session的超时时间一般为20分钟,刚好可以用来统计在线人数,即20分钟内的活动访客认为是在线的。

在commond.asp有如下一段代码用来记录访问记录:

复制代码 代码如下:

' Guest_IP为访客的IP
IF Session("GuestIP")<>Guest_IP Then
Dim Guest_Agent,Guest_Refer
' Guest_Agent和Guest_Refer访问记录要用到
Guest_Agent=Trim(Request.ServerVariables("HTTP_USER_AGENT"))
Guest_Refer=Trim(Request.ServerVariables("HTTP_REFERER"))
' 添加一个访问记录
Conn.ExeCute("INSERT INTO blog_Counter(coun_IP,coun_Agent,coun_Refer) VALUES
('"&Guest_IP&"','"&Guest_Agent&"','"&Guest_Refer&"')")
' 访问次数加1
Conn.ExeCute("UPDATE blog_Info SET blog_VisitNums=blog_VisitNums 1")
SQLQueryNums=SQLQueryNums 2
' 用Session保存访客IP
Session("GuestIP")=Guest_IP
End IF

为了实现在线人数统计,我在数据库里做了一些改动:
1. 在表blog_Info添加了1个字段blog_OnlineNums(整型),用来保存网站当前在线人数
2. 添加了表blog_Onine,字段设置为:ol_ID(自动编号),ol_IP(字符,20),ol_Time(日期/时间,默认值Now)。
修改后的站点统计代码如下:
复制代码 代码如下:

'站点统计代码
IF Session("GuestIP")<>Guest_IP Then
' 原来的站点访问计数器
Conn.ExeCute("INSERT INTO blog_Counter(coun_IP,coun_Agent,coun_Refer)
VALUES ('"&Guest_IP&"','"&Guest_Agent&"','"&Guest_Refer&"')")
Conn.ExeCute("UPDATE blog_Info SET blog_VisitNums=blog_VisitNums+1")
SQLQueryNums=SQLQueryNums+2
Session("GuestIP")=Guest_IP
'在线人数统计
' 判断在在线列表中是否在在已经超时的访客
IF Conn.ExeCute("SELECT COUNT(ol_ID) FROM blog_Online
WHERE DateDiff('n',ol_Time,Now())>20")(0)>0 Then
' 如果有则覆盖一个已超时访客的记录
Conn.ExeCute("UPDATE blog_Online SET ol_IP='"&Guest_IP&"',
ol_Time=Now() WHERE ol_ID IN (SELECT TOP 1 ol_ID
FROM blog_Online WHERE DateDiff('n',ol_Time,Now())>20)")
Else
' 如果没有则添加一条在线访客记录
Conn.ExeCute("INSERT INTO blog_Online (ol_IP)
VALUES ('"&Guest_IP&"')")
End IF
' 统计blog在线人数
blog_OnlineNums=Conn.ExeCute("SELECT DISTINCT COUNT(ol_ID)
FROM blog_Online WHERE DateDiff('n',ol_Time,Now())<20")(0)
' 更新blog信息中的在线人数
Conn.ExeCute("UPDATE blog_Info SET blog_OnlineNums="&blog_OnlineNums&"")
SQLQueryNums=SQLQueryNums+3
End IF

这样,在blog中需要显示在线人数的地方引用变量blog_OnlineNums就行了。
并且因为是被动式统计,对blog页面执行时间的影响几乎可以忽略不计,另外,这个方法统计的blog在线人数也有一定的准确性,可以满足一般的需求了。