在學校裡不能上網時,沒事做就改了下blog程序,加上了個blog在線人數統計。在此之前也看了幾種統計在線人數的代碼,感覺都不太符合自己的要求,就結合blog程序自己寫了一個,應用到我的blog上。
在Fdream的blog裡提到了一些關於ASP統計在線人數的方法,具體可以看這裡。
為了兼顧準確率與效率,我採用了被動的方式來統計在線人,即當有新訪客時才更新在線人數。不知道網上有沒有已經有人使用了這種方法,不過我現在用的完全是自己想的^_^。
在L-Blog中採用Session來判斷訪客是否為新訪客。 Session的超時時間一般為20分鐘,剛好可以用來統計在線人數,即20分鐘內的活動訪客認為是在線的。
在commond.asp有如下一段代碼用來記錄訪問記錄:
複製代碼代碼如下:
'Guest_IP為訪客的IP
IFSession("GuestIP")<>Guest_IPThen
DimGuest_Agent,Guest_Refer
'Guest_Agent和Guest_Refer訪問記錄要用到
Guest_Agent=Trim(Request.ServerVariables("HTTP_USER_AGENT"))
Guest_Refer=Trim(Request.ServerVariables("HTTP_REFERER"))
'添加一個訪問記錄
Conn.ExeCute("INSERTINTOblog_Counter(coun_IP,coun_Agent,coun_Refer)VALUES
('"&Guest_IP&"','"&Guest_Agent&"','"&Guest_Refer&"')")
'訪問次數加1
Conn.ExeCute("UPDATEblog_InfoSETblog_VisitNums=blog_VisitNums1")
SQLQueryNums=SQLQueryNums2
'用Session保存訪客IP
Session("GuestIP")=Guest_IP
EndIF
為了實現在線人數統計,我在數據庫裡做了一些改動:
1.在表blog_Info添加了1個字段blog_OnlineNums(整型),用來保存網站當前在線人數
2.添加了表blog_Onine,字段設置為:ol_ID(自動編號),ol_IP(字符,20),ol_Time(日期/時間,默認值Now)。
修改後的站點統計代碼如下:
複製代碼代碼如下:
'站點統計代碼
IFSession("GuestIP")<>Guest_IPThen
'原來的站點訪問計數器
Conn.ExeCute("INSERTINTOblog_Counter(coun_IP,coun_Agent,coun_Refer)
VALUES('"&Guest_IP&"','"&Guest_Agent&"','"&Guest_Refer&"')")
Conn.ExeCute("UPDATEblog_InfoSETblog_VisitNums=blog_VisitNums+1")
SQLQueryNums=SQLQueryNums+2
Session("GuestIP")=Guest_IP
'在線人數統計
'判斷在在線列表中是否在在已經超時的訪客