被動(dòng)式統(tǒng)計(jì)網(wǎng)站在線人數(shù)
在學(xué)校里不能上網(wǎng)時(shí),沒事做就改了下blog程序,加上了個(gè)blog在線人數(shù)統(tǒng)計(jì)。在此之前也看了幾種統(tǒng)計(jì)在線人數(shù)的代碼,感覺都不太符合自己的要求,就結(jié)合blog程序自己寫了一個(gè),應(yīng)用到我的blog上。
在Fdream的blog里提到了一些關(guān)于ASP統(tǒng)計(jì)在線人數(shù)的方法,具體可以看這里。
為了兼顧準(zhǔn)確率與效率,我采用了被動(dòng)的方式來(lái)統(tǒng)計(jì)在線人,即當(dāng)有新訪客時(shí)才更新在線人數(shù)。不知道網(wǎng)上有沒有已經(jīng)有人使用了這種方法,不過我現(xiàn)在用的完全是自己想的^_^。
在L-Blog中采用Session來(lái)判斷訪客是否為新訪客。Session的超時(shí)時(shí)間一般為20分鐘,剛好可以用來(lái)統(tǒng)計(jì)在線人數(shù),即20分鐘內(nèi)的活動(dòng)訪客認(rèn)為是在線的。
在commond.asp有如下一段代碼用來(lái)記錄訪問記錄:
' 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"))
' 添加一個(gè)訪問記錄
Conn.ExeCute("INSERT INTO blog_Counter(coun_IP,coun_Agent,coun_Refer) VALUES
('"&Guest_IP&"','"&Guest_Agent&"','"&Guest_Refer&"')")
' 訪問次數(shù)加1
Conn.ExeCute("UPDATE blog_Info SET blog_VisitNums=blog_VisitNums 1")
SQLQueryNums=SQLQueryNums 2
' 用Session保存訪客IP
Session("GuestIP")=Guest_IP
End IF
為了實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì),我在數(shù)據(jù)庫(kù)里做了一些改動(dòng):
1. 在表blog_Info添加了1個(gè)字段blog_OnlineNums(整型),用來(lái)保存網(wǎng)站當(dāng)前在線人數(shù)
2. 添加了表blog_Onine,字段設(shè)置為:ol_ID(自動(dòng)編號(hào)),ol_IP(字符,20),ol_Time(日期/時(shí)間,默認(rèn)值Now)。
修改后的站點(diǎn)統(tǒng)計(jì)代碼如下:
'站點(diǎn)統(tǒng)計(jì)代碼
IF Session("GuestIP")<>Guest_IP Then
' 原來(lái)的站點(diǎn)訪問計(jì)數(shù)器
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
'在線人數(shù)統(tǒng)計(jì)
' 判斷在在線列表中是否在在已經(jīng)超時(shí)的訪客
IF Conn.ExeCute("SELECT COUNT(ol_ID) FROM blog_Online
WHERE DateDiff('n',ol_Time,Now())>20")(0)>0 Then
' 如果有則覆蓋一個(gè)已超時(shí)訪客的記錄
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
' 統(tǒng)計(jì)blog在線人數(shù)
blog_OnlineNums=Conn.ExeCute("SELECT DISTINCT COUNT(ol_ID)
FROM blog_Online WHERE DateDiff('n',ol_Time,Now())<20")(0)
' 更新blog信息中的在線人數(shù)
Conn.ExeCute("UPDATE blog_Info SET blog_OnlineNums="&blog_OnlineNums&"")
SQLQueryNums=SQLQueryNums+3
End IF
這樣,在blog中需要顯示在線人數(shù)的地方引用變量blog_OnlineNums就行了。
并且因?yàn)槭潜粍?dòng)式統(tǒng)計(jì),對(duì)blog頁(yè)面執(zhí)行時(shí)間的影響幾乎可以忽略不計(jì),另外,這個(gè)方法統(tǒng)計(jì)的blog在線人數(shù)也有一定的準(zhǔn)確性,可以滿足一般的需求了。
- 不用Global.asa也能實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)嗎?
- 統(tǒng)計(jì)在線人數(shù)是實(shí)時(shí)的嗎?
- asp論壇在線人數(shù)統(tǒng)計(jì)研究
- 也談php網(wǎng)站在線人數(shù)統(tǒng)計(jì)
- javascript 傳統(tǒng)事件模型構(gòu)造的事件監(jiān)聽器實(shí)現(xiàn)代碼
- c#顯示當(dāng)前在線人數(shù)示例
- 封裝了一個(gè)支持匿名函數(shù)的Javascript事件監(jiān)聽器
- php+memcache實(shí)現(xiàn)的網(wǎng)站在線人數(shù)統(tǒng)計(jì)代碼
- PHP+jquery實(shí)時(shí)顯示網(wǎng)站在線人數(shù)的方法
- jsp利用application統(tǒng)計(jì)在線人數(shù)的方法
- php實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)站在線人數(shù)的方法
- ASP.NET中使用Application對(duì)象實(shí)現(xiàn)簡(jiǎn)單在線人數(shù)統(tǒng)計(jì)功能
- php使用Session和文件統(tǒng)計(jì)在線人數(shù)
- 淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別
- 利用java監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)
相關(guān)文章
研究動(dòng)網(wǎng)得到的一些動(dòng)網(wǎng)參數(shù)
研究動(dòng)網(wǎng)得到的一些動(dòng)網(wǎng)參數(shù)...2006-11-11可用的ASP無(wú)重復(fù)數(shù)字隨機(jī)函數(shù), 數(shù)組實(shí)現(xiàn), 并應(yīng)用于隨機(jī)顯示記錄集
可用的ASP無(wú)重復(fù)數(shù)字隨機(jī)函數(shù), 數(shù)組實(shí)現(xiàn), 并應(yīng)用于隨機(jī)顯示記錄集...2007-03-03asp下sql和access數(shù)據(jù)庫(kù)隨機(jī)取10條記錄的代碼newid()
利于搜索從表中隨機(jī)取幾條不重復(fù)記錄,一般都是10條,我就用了40條,大約的代碼就是下面的了2007-12-12一個(gè)改進(jìn)的ASP生成SQL命令字符串類的代碼[已測(cè)]
網(wǎng)上找資料發(fā)現(xiàn)的,但是調(diào)試的時(shí)候發(fā)現(xiàn)有一些問題,改了一下,還有一定的問題,但是可以做一般使用了。沒有考慮數(shù)據(jù)類型的問題,還有SQL Server 和access的區(qū)別,以后有時(shí)間再改進(jìn)吧,不知道效率怎么樣。如果有朋友改進(jìn),也麻煩給我發(fā)一份2011-12-12ASP中DateAdd函數(shù)中日期相加或相減使用方法
本文將介紹ASP中DateAdd函數(shù)中日期相加或相減使用方法,需要了解的朋友可以參考下2012-12-12asp中最新新聞顯示new圖片的實(shí)現(xiàn)代碼
很多朋友想在最新新聞顯示new圖片,以便訪客快速找到新更新的內(nèi)容,原理就是通過判斷日期2012-03-03