最近用ASP做了一個小論壇,客戶又要求要統計在線人數,所以花了點時間寫一個在線統計訪會員的功能。寫的過程中也查看了許多文檔。自我感覺用的方法能比較準確的統計在線人數。當然一定也有不足的地方,希望各位老師糾正。 特別說明: 本論壇登錄是采用用戶名
??? 最近用ASP做了一個小論壇,客戶又要求要統計在線人數,所以花了點時間寫一個在線統計訪會員的功能。寫的過程中也查看了許多文檔。自我感覺用的方法能比較準確的統計在線人數。當然一定也有不足的地方,希望各位老師糾正。
? 特別說明:
? 本論壇登錄是采用用戶名登錄,登錄后取得用戶昵稱。整個網站不顯示用戶名,我想相對來說安全一點吧,所以有昵稱和用戶名區別。
? 1。建立數據庫表
? 表名為online
? 設如下字段
? id ‘用來記錄每一個訪問都的session.sessionid
? name ‘如果是訪客,則記錄為訪客。
? online? ‘如果是訪各為0 如果是會員1
? datetime ‘最近活動時間
? username ‘會員的登錄用戶名,訪客為空。
? ip ‘記錄訪問都的登錄IP
? head.asp ‘向數據庫表寫入在線人數,該頁面必須搜入到每一個用于瀏覽ASP頁面中。
| <% set rs=Server.CreateObject(“ADODB.Recordset”) if session(“username”)=”” then 判斷用戶未登錄 sql=”select * from online where id='”&session.sessionid&”‘ ”? ‘判斷這個sessionid是否存在于數據庫表中. rs.Open sql,Conn,1,3 if rs.eof then? ‘訪客第一次瀏覽 rs.addnew rs(“id”)=session.sessionID rs(“name”)=”游客” rs(“online”)=0????? ‘0表示用戶未登陸,是游客身份 rs(“datetime”)=now() userip = Request.ServerVariables(“HTTP_X_FORWARDED_FOR”) ??????? If userip = “” Then ??????? userip= Request.ServerVariables(“REMOTE_ADDR”) ??????? end if ? rs(“ip”)=userip else????? ‘訪客非第一次瀏覽 |
| rs(“datetime”)=now()? ‘更新活動時間 rs.update rs.close end if else sql=”select * from online where id='” & session.sessionID & “‘ or admin='”&session(“username”)&”‘”? ‘判斷sessionid 或者 用戶名記錄已存在數據表中。 rs.Open sql,Conn,1,3 if rs.eof then rs.addnew?? ‘會員第一次進入網站(可能從網站首頁直接登錄進入論壇)。 rs(“id”)=session.sessionID rs(“name”)=session(“show”) ‘寫入用戶昵稱 rs(“username”)=session(“username”)??? ‘寫入登錄用戶名 rs(“online”)=1???????? ‘表示用戶已經登陸,是會員身份 rs(“datetime”)=now()??????? ‘將當前系統時間設置為用戶的登陸時間 userip = Request.ServerVariables(“HTTP_X_FORWARDED_FOR”) ??????? If userip = “” Then ??????? userip= Request.ServerVariables(“REMOTE_ADDR”) ??????? end if ? rs(“ip”)=userip else? //會員非第一次瀏覽網站,訪客登錄網站。 rs(“name”)=session(“show”) 更新用戶昵稱 rs(“username”)=session(“username”) rs(“online”)=1???????? ‘表示用戶已經登陸,是會員身份 rs(“datetime”)=now() end if rs.update rs.close end if set rs=nothing %> conn.execute(“delete from online where datediff(‘s’,datetime,now())>60”)? ‘刪除60秒沒有活動的訪客,時間可以自己調整。 |