国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

一個統計當前在線用戶的解決方案

2019-11-18 19:48:04
字體:
來源:轉載
供稿:網友

在做一個在線交流的網站時,有個問題很令我頭疼,就是關于實時統計在線用戶的問題,客戶要求:統計當前在線人數、游客人數、會員人數、在線用戶列表,包括游客、會員和管理員(如果是游客,則自動生成游客的ID,如果是會員,則顯示會員姓名)。因為它要求有實時性,則首先我將用global.asa解決的想法pass掉。

問題的關鍵是如何判斷用戶已經離開,和當用戶離開時如何執行一個文件或一個函數。

經過和網上一些朋友的探討,終于解決了這個問題。

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

主要實現方法為:

新建一數據庫,字段名稱分別為:id(字符),name(字符),user(數字)tt(日期),admin(權限代碼,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     '設置用戶的資料已經存入數據庫,表示已經在線
end if

if session("s_name")<>"" then      '如果用戶已經通過登錄框登錄
 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         '表示用戶已經登陸,是會員身份
   rs("tt")=now        '將當前系統時間設置為用戶的登陸時間
  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發送更新請求
    xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
    xmlhttp.send();
    }
    setInterval("Test();",10); // 10秒鐘發送一次更新請求
   </script>

... ...

</head>

... ...

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

onceonline.asp

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

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

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

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

本方案在WIN2000+SQL Server2000上調試通過,由于本方案對系統要求比較大,期待其他朋友拿出更好的方案,一起解決這個問題!

我的信箱:my5243@hotmail.com

我叫“積木”,歡迎你和我成為朋友!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳曲县| 旌德县| 晋中市| 安国市| 太湖县| 龙川县| 通榆县| 杭锦后旗| 华宁县| 宝兴县| 鲁山县| 石林| 固镇县| 扶余县| 凤阳县| 泸水县| 渝中区| 南充市| 华宁县| 吉林市| 玛曲县| 紫阳县| 陇南市| 陵水| 临湘市| 新民市| 德兴市| 汤原县| 谢通门县| 桦南县| 巴东县| 北宁市| 文化| 宝清县| 东光县| 塔河县| 开封市| 朝阳市| 梅河口市| 滦平县| 东丰县|