您的位置:首页 > 编程语言 > ASP

asp vb.net 在线统计 简单版本 和精确版本

2009-11-12 18:12 288 查看
asp

简单在线统计版本

在Global.asa文件中加入如下的代码:
Asp代码
1. <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
2.
3. Sub Application_OnStart
4.
5. '当服务器开启时,设置在线用户计数器为0
6. Application("ActiveUsers") = 0
7.
8. '设置每天访问量为0
9. Application("EveryDayUsers") = 0
10. '访问的时间为
11. Application("RecordDate") = "2009-01-01"
12.
13. End Sub
14.
15. Sub Session_OnStart
16.
17. '设置Session对象的有效时间为20分钟(也可以更长,但是越长对服务器的资源'占用越多,因为服务器不接受少于20分钟的有效时间,所以设置少于20分钟的'有效时间是无效的)
18. Session.Timeout = 30
19.
20. ' 当开始一个Session时在线用户计数器加1
21. Application.Lock
22. Application("ActiveUsers") = Application("ActiveUsers") + 1
23.
24. '每天的访问量加1
25. if Application("RecordDate") <> Date() Then
26.     Application.Lock
27.     Application("RecordDate") = Date()
28.     Application("EveryDayUsers") = 1
29.     Application.UnLock
30. else
31.     Application.Lock
32.     Application("EveryDayUsers") = Application("EveryDayUsers")+1
33.     Application.UnLock
34. end if
35.
36. '统计总访问量
37. CountFile=Server.MapPath("txtcounter.txt")
38. Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
39. Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
40. counter=Out.ReadLine
41. Out.Close
42. SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
43. Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
44. Application.lock
45. counter= counter + 1
46. Application("TotalUsers") = counter
47. Out.WriteLine(counter)
48. Application.unlock
49. Out.Close
50.
51.
52.
53. End Sub
54.
55.
56. Sub Session_OnEnd
57.
58. '当结束一个Session时用户计数器减1
59. Application.Lock
60. Application("ActiveUsers") = Application("ActiveUsers") - 1
61. Application.UnLock
62.
63. End Sub
64.
65. </SCRIPT>
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
'当服务器开启时,设置在线用户计数器为0
Application("ActiveUsers") = 0
'设置每天访问量为0
Application("EveryDayUsers") = 0
'访问的时间为
Application("RecordDate") = "2009-01-01"
End Sub
Sub Session_OnStart
'设置Session对象的有效时间为20分钟(也可以更长,但是越长对服务器的资源'占用越多,因为服务器不接受少于20分钟的有效时间,所以设置少于20分钟的'有效时间是无效的)
Session.Timeout = 30
' 当开始一个Session时在线用户计数器加1
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") + 1
'每天的访问量加1
if Application("RecordDate") <> Date() Then
Application.Lock
Application("RecordDate") = Date()
Application("EveryDayUsers") = 1
Application.UnLock
else
Application.Lock
Application("EveryDayUsers") = Application("EveryDayUsers")+1
Application.UnLock
end if
'统计总访问量
CountFile=Server.MapPath("txtcounter.txt")
Set FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.OpenTextFile(CountFile,1,FALSE,FALSE)
counter=Out.ReadLine
Out.Close
SET FileObject=Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.CreateTextFile(CountFile,TRUE,FALSE)
Application.lock
counter= counter + 1
Application("TotalUsers") = counter
Out.WriteLine(counter)
Application.unlock
Out.Close

End Sub
Sub Session_OnEnd
'当结束一个Session时用户计数器减1
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") - 1
Application.UnLock
End Sub
</SCRIPT>
为了实现定时刷新页面数据信息,用单独的一个页面来存放对这些数据的访问
online.asp
Java代码
1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3. <html xmlns="http://www.w3.org/1999/xhtml">
4. <head>
5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
6. <meta http-equiv="Refresh" content="10"><!--设置自动刷新-->
7. <title>在线人数</title>
8. </head>
9.
10. <body style="width:190px; margin:0px; height:100%">
11. 今天的访问量为:<%= Application("EveryDayUsers") %>人<br />
12. 当前在线人数:<%= Application("ActiveUsers") %>人<br />
13. 总访问量: <%= Application("TotalUsers") %>人
14. </body>
15. </html>
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Refresh" content="10"><!--设置自动刷新-->
<title>在线人数</title>
</head>
<body style="width:190px; margin:0px; height:100%">
今天的访问量为:<%= Application("EveryDayUsers") %>人<br />
当前在线人数:<%= Application("ActiveUsers") %>人<br />
总访问量: <%= Application("TotalUsers") %>人
</body>
</html>
在主页面中引用这个页面即可
Java代码
1. <IFRAME name="online" SRC="online.asp" mce_SRC="online.asp" align="center" frameborder="0" width="190" height="80px" scrolling="no"> </IFRAME>


asp精确版本,测试通过

<%
'RefreshTime变量一定要在此宣告,否则无法在网页中以   RefreshTime   方式存取
Dim RefreshTime
Dim IdleTime, Num, I
Dim Tmp()
Dim  ID
RefreshTime = 10           '设定网页自动更新时间为10秒
IdleTime = RefreshTime * 3 '设定空闲时间为自动更新时间的3倍
Session("Flag") = True     '新增此Session变量以使Session对象能正常运作
Application.Lock
'清点所有联机到此网页的浏览器,然后将目前开启之浏览器的SessionID放入数组的最后
If isempty(Application(Session.SessionID & "LastAccessTime") )= true Then
If isempty(Application("ActUsers") )=true Then Application ("ActUsers")=0
ReDim Tmp(Application("ActUsers") + 1)
Num = 0
If Application("ActUsers") > 0 Then
For I = 0 To UBound(Application("OnlineUser"))
ID = Application("OnlineUser")(I)
If ID <> Session.SessionID Then
Tmp(Num) = ID
Num = Num+1
End If
Next
End If
Tmp(Num) = Session.SessionID
Application ("ActUsers")= Num + 1
ReDim Preserve Tmp(Application("ActUsers"))
Application("OnlineUser" )=  Tmp
End If

'记录目前开启之浏览器的最近访问时间
Application (Session.SessionID & "LastAccessTime" )=Timer
'检查所有联机到此网页之浏览器的最近访问时间,如果与目前时间相差30秒以上,表示结束联机
ReDim Tmp(Application("ActUsers"))
Num = 0
For I = 0 To Application("ActUsers") - 1
ID = Application("OnlineUser")(I)
If ( Timer - Application(ID & "LastAccessTime")) < IdleTime Then
Tmp(Num) = ID
Num  = Num+1
Else
Application (ID & "LastAccessTime")=empty
End If
Next
'Num表示目前在线人数,如果与Application("ActUsers") 不同,表示中间有人断线
If Num <> Application("ActUsers") Then
ReDim Preserve Tmp(Num)
Application ("OnlineUser")=  Tmp
Application ("ActUsers")=  Num
End If
Application.UnLock
%>
<html>
<head>
<meta http-equiv="Refresh" content="<%= RefreshTime %>, url=<%= Request.ServerVariables("Url") %>">
</head>
<body>
<%response.write"目前在线人数:" & Application("ActUsers")
response.write"总访问人数:" & Application("TotalUsers") ' 这个只要在global.asa里面出来就可以
%>
</body>
</html>


global.asa

在global 里面使用Server.MapPath需要相当注意,如果你的页面还有文件夹的话,

需要添加判断路径是否存在!if fsObj.FileExists(FilePath) then end if

还有就是Sub Application_OnStart 是表示当 iisreset 以后,第一个访问页面会执行到!所以有可能第一个页面访问的不是根目录的文件,那么 FilePath=Server.MapPath("upload")&"//txtcounter.txt" 就不会存在!也就是 Application("TotalUsers") = 0 !从新开始计数

ub Application_OnStart
Application("TotalUsers") = 0
'//当服务器开启时,获取文本中的统计总访问量
dim fsObj,txtsObj,FilePath
set   fsObj=CreateObject("Scripting.FileSystemObject")
FilePath=Server.MapPath("upload")&"//txtcounter.txt"
if fsObj.FileExists(FilePath) then
set   txtsObj=fsObj.OpenTextFile(FilePath)
Application("TotalUsers") =txtsObj.ReadLine
txtsObj.Close
end if
'//当服务器开启时,获取文本中的统计总访问量
End Sub

Sub Session_OnStart
'//当用户第一次访问时总数加1写入文本
dim fsObj,txtsObj,FilePath
set   fsObj=CreateObject("Scripting.FileSystemObject")
FilePath=Server.MapPath("upload")&"//txtcounter.txt"
if fsObj.FileExists(FilePath) then
set fsObj=fsObj.OpenTextFile(FilePath, 2, True)
Application.lock
Application("TotalUsers") = Application("TotalUsers")+1
Application.unlock
fsObj.Write(Application("TotalUsers"))
fsObj.Close
'//当用户第一次访问时总数加1写入文本
end if
End Sub


vb.net 精确版本,测试通过

<%@ Page Language="VB" %>
<Script runat="server">
'RefreshTime变量一定要在此宣告,否则无法在网页中以 <%= RefreshTime %> 方式存取
Dim RefreshTime As Integer
Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs)
Dim IdleTime, Num, I As Integer
Dim Tmp(), ID As String
RefreshTime = 10           '设定网页自动更新时间为10秒
IdleTime = RefreshTime * 3 '设定空闲时间为自动更新时间的3倍
Session("Flag") = True     '新增此Session变量以使Session对象能正常运作
Application.Lock
'清点所有联机到此网页的浏览器,然后将目前开启之浏览器的SessionID放入数组的最后
If Application(Session.SessionID & "LastAccessTime") = Nothing Then
If Application("TotalUsers") = Nothing Then Application.Set("TotalUsers", 0)
ReDim Tmp(Application("TotalUsers") + 1)
Num = 0
If Application("TotalUsers") > 0 Then
For I = 0 To UBound(Application("OnlineUser"))
ID = Application("OnlineUser")(I)
If ID <> Session.SessionID Then
Tmp(Num) = ID
Num += 1
End If
Next
End If
Tmp(Num) = Session.SessionID
Application.Set("TotalUsers", Num + 1)
ReDim Preserve Tmp(Application("TotalUsers"))
Application.Set("OnlineUser", Tmp)
End If

'记录目前开启之浏览器的最近访问时间
Application.Set(Session.SessionID & "LastAccessTime", Microsoft.VisualBasic.DateAndTime.Timer)
'检查所有联机到此网页之浏览器的最近访问时间,如果与目前时间相差30秒以上,表示结束联机
ReDim Tmp(Application("TotalUsers"))
Num = 0
For I = 0 To Application("TotalUsers") - 1
ID = Application("OnlineUser")(I)
If (Microsoft.VisualBasic.DateAndTime.Timer - Application(ID & "LastAccessTime")) < IdleTime Then
Tmp(Num) = ID
Num += 1
Else
Application.Set(ID & "LastAccessTime", Nothing)
End If
Next
'Num表示目前在线人数,如果与Application("TotalUsers") 不同,表示中间有人断线
If Num <> Application("TotalUsers") Then
ReDim Preserve Tmp(Num)
Application.Set("OnlineUser", Tmp)
Application.Set("TotalUsers", Num)
End If
myCounter.Text = "目前在线人数:" & Application("TotalUsers")
Application.UnLock
End Sub
</Script>
<html>
<head>
<meta http-equiv="Refresh" content="<%= RefreshTime %>, url=<%= Request.ServerVariables("Url") %>">
</head>
<body>
<Asp:Label Runat="Server" Id="myCounter" />
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: