程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> 被動式統計網站在線人數

被動式統計網站在線人數

編輯:關於ASP編程

在學校裡不能上網時,沒事做就改了下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在線人數也有一定的准確性,可以滿足一般的需求了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved