主頁 > 知識庫 > asp實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)當(dāng)前在線用戶的解決方案

asp實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)當(dāng)前在線用戶的解決方案

熱門標(biāo)簽:滴滴地圖標(biāo)注上車點(diǎn) 外呼系統(tǒng)怎么話費(fèi) 宿州防封外呼系統(tǒng)平臺 高質(zhì)量的電銷外呼系統(tǒng) 電銷機(jī)器人采購 友邦互聯(lián)電銷機(jī)器人違法嗎 無營業(yè)執(zhí)照地圖標(biāo)注教學(xué) 硅基電話機(jī)器人加盟 地圖標(biāo)注還可以做嗎
一個(gè)統(tǒng)計(jì)當(dāng)前在線用戶的解決方案

在做一個(gè)在線交流的網(wǎng)站時(shí),有個(gè)問題很令我頭疼,就是關(guān)于實(shí)時(shí)統(tǒng)計(jì)在線用戶的問題,客戶要求:統(tǒng)計(jì)當(dāng)前在線人數(shù)、游客人數(shù)、會員人數(shù)、在線用戶列表,包括游客、會員和管理員(如果是游客,則自動(dòng)生成游客的ID,如果是會員,則顯示會員姓名)。因?yàn)樗笥袑?shí)時(shí)性,則首先我將用global.asa解決的想法pass掉。

問題的關(guān)鍵是如何判斷用戶已經(jīng)離開,和當(dāng)用戶離開時(shí)如何執(zhí)行一個(gè)文件或一個(gè)函數(shù)。

經(jīng)過和網(wǎng)上一些朋友的探討,終于解決了這個(gè)問題。

解決的原理為:編寫一個(gè)通用頁面,所謂的通用頁面,就是應(yīng)用里的每個(gè)頁面都包含這個(gè)頁面,例如:header.asp,在這個(gè)頁面里,用XMLHTTP寫一段代碼,這段代碼的作用是每隔10秒或20秒就向服務(wù)器發(fā)送一個(gè)請求,目的是更新當(dāng)前用戶的在線時(shí)間并刪除在線時(shí)間超過一定時(shí)間的用戶,使數(shù)據(jù)庫中的在線用戶記錄保持一定的實(shí)時(shí)性。

主要實(shí)現(xiàn)方法為:

新建一數(shù)據(jù)庫,字段名稱分別為:id(字符),name(字符),user(數(shù)字)tt(日期),admin(權(quán)限代碼,0-普通用戶,1-管理員)

表名:online

header.asp ↓

============================================================

%

... ...

if session("s_in")>1 and session("s_name")="" then '如果用戶是第一次登陸

rs.open "select * from online",conn,3,3
rs.addnew
rs("id")=session.sessionID
rs("name")="游客"  session.sessionID
rs("user")=0 '0表示用戶未登陸,是游客身份
rs("tt")=now
rs.update
rs.close
session("s_in")=1 '設(shè)置用戶的資料已經(jīng)存入數(shù)據(jù)庫,表示已經(jīng)在線
end if

if session("s_name")>"" then '如果用戶已經(jīng)通過登錄框登錄
rs.open "select * from online where id='"  session.sessionID  "'",conn,3,3
rs("name")=session("s_name")
rs("admin")=session("s_admin") '將用戶的姓名更新為會員名稱
rs("user")=1 '表示用戶已經(jīng)登陸,是會員身份
rs("tt")=now '將當(dāng)前系統(tǒng)時(shí)間設(shè)置為用戶的登陸時(shí)間
rs.update
rs.close
end if

... ...

%>

... ...

head>

... ...

script language=javascript>
function Test()
{
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","onceonline.asp",false); // 向onceonline.asp發(fā)送更新請求
xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
xmlhttp.send();
}
setInterval("Test();",10); // 10秒鐘發(fā)送一次更新請求
/script>

... ...

/head>

... ...

==========================================================

onceonline.asp

%
rs.open "select tt from online where id='"  session.sessionID  "'",conn,3,3
rs("tt")=now() '更新當(dāng)前在線用戶的在線時(shí)間
rs.update
rs.close

rs.open "delete from online where datediff('s',tt,now())>60",conn,3,1 '刪除超時(shí)用戶
%>

==============================================================

這樣,基本保證了數(shù)據(jù)庫中用戶列表的實(shí)時(shí)性,誤差取決于更新時(shí)間和刪除時(shí)間的差值大小和服務(wù)器的處理速度,建議不要將刪除超時(shí)用戶的時(shí)間間隔取的過于小,那樣有可能會導(dǎo)致在線用戶0人的失誤。

本方案在WIN2000+SQL Server2000上調(diào)試通過,由于本方案對系統(tǒng)要求比較大,期待其他朋友拿出更好的方案,一起解決這個(gè)問題!
您可能感興趣的文章:
  • ASP制作在線人數(shù)統(tǒng)計(jì)實(shí)例
  • 統(tǒng)計(jì)有多少行JS代碼和ASP代碼
  • ASP程序代碼執(zhí)行時(shí)間統(tǒng)計(jì)類
  • asp論壇在線人數(shù)統(tǒng)計(jì)研究
  • 實(shí)現(xiàn)ASP程序執(zhí)行時(shí)間統(tǒng)計(jì)類的代碼
  • ASP訪問數(shù)量統(tǒng)計(jì)代碼
  • asp.net aspnetpager分頁統(tǒng)計(jì)時(shí)與實(shí)際不符的解決辦法
  • asp.net中調(diào)用Office來制作3D統(tǒng)計(jì)圖的實(shí)例代碼
  • ASP.net中網(wǎng)站訪問量統(tǒng)計(jì)方法代碼
  • php模仿asp Application對象在線人數(shù)統(tǒng)計(jì)實(shí)現(xiàn)方法
  • 四步完成asp網(wǎng)頁設(shè)計(jì)流量統(tǒng)計(jì)

標(biāo)簽:江門 新余 儋州 七臺河 宣城 雅安 錫林郭勒盟 廣元

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《asp實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)當(dāng)前在線用戶的解決方案》,本文關(guān)鍵詞  asp,實(shí)現(xiàn),一個(gè),統(tǒng)計(jì),當(dāng)前,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《asp實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)當(dāng)前在線用戶的解決方案》相關(guān)的同類信息!
  • 本頁收集關(guān)于asp實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)當(dāng)前在線用戶的解決方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章