2014-11-22 62 views
0

如何添加顯示哪些用戶在線直到他們離開頁面或註銷的區域?添加'在線用戶'區域

我想過製作一個表格,讓用戶會話保持到他們離開頁面,但是我怎麼能夠告訴他們什麼時候離開?我只需要每5秒更新一次。我想遠離cron作業距離酒店僅在windows的情況下,(Windows不支持cron的不是嗎?)

感謝所有幫助

回答

0

我在我們的應用程序之一,前一段時間做了類似的事情。將Ajax調用綁定到某個事件,如click或mousemove。在那個調用中,將時間戳寫入active_users表。寫另一個函數來查詢這個表,並選擇時間戳比5分鐘更早的用戶。以特定的時間間隔或broeser事件通過Ajax進行調用。

0

有很多可能的解決方案,如果你想要回代碼,你應該爲你的實現發佈一些代碼。

作爲一個總體設計問題,您可能需要一種方法來存儲有多少用戶在線(更多地檢測下面的內容),無論是在內存中(後端服務,在內存數據庫像redis或memcached)或磁盤(常規D B)。

至於檢測用戶何時在線,這可能是一個相當困難的問題,但假設精確到第二個數字並不重要,您可以增加數字(從上面的數據庫或內存中)當您提供頁面(PHP)或用戶加載頁面時(Javascript)。

至於檢測用戶何時離開,您可以在Javascript中使用onunload處理程序,以便在用戶導航時通知服務器。需要注意的一個警告是,這條消息可能會丟失或者不會被髮送(即JS關閉,瀏覽器崩潰等),並且您的計數可能變得非常不準確。

或者,客戶端可以ping每[predefined interval]心跳和服務器的服務器會知道他們是在網上(遞減計數器,當用戶停止發送心跳,假設他們已導航離開)基於這些

高級別的解決方案,他們也可以組合成一個混合解決方案,使用心跳檢測用戶是否仍然在線以及在關閉/導航時立即通知服務器。

最後,就像關於cron作業的說明一樣,Windows本身沒有cron,但可以使用計劃任務完成類似的目標。

+0

是否有一個數據庫設置,如果它尚未x分鐘內更新,將x分鐘後刪除它們 – Cheesecake 2014-11-22 16:34:52

+0

或者可能你指出我心跳的正確方向理念? – Cheesecake 2014-11-22 17:00:33

+0

參考我的回答,看我是怎麼做的 – Cheesecake 2014-11-22 17:32:12

0

有各種選擇。這是我更喜歡的,但你的里程可能會有所不同。

使用JavaScript來請求用戶在一段時間內輪詢/碰撞您的服務器,並使用此請求來存儲哪些用戶在線。使用jQuery JavaScript部分的一個例子:

var ajaxCall; 
var livedataTimer; 
function poll(timeout){ 
    livedataTimer = setTimeout(function(){ 
     if (ajaxCall != null){ 
     ajaxCall.abort(); 
     } 
     if (timeout == 5){ 
     timeout = 10000; 
     } 
     ajaxCall = $.ajax({ url: '/ajax/bump.php', type: 'POST', success: function(data){ 
     poll(timeout); 
     }, dataType: "json"}); 
    }, timeout); 
    return livedataTimer; 
} 

/ajax/bump.php文件的一個示例:

<?php 

session_start(); ## to know which user is online 

## connect to your DB somewhere 

mysqli_query($connection," 
    INSERT INTO `online-status` 
    (`user`, `time`) 
    VALUES 
    (".(int)$_SESSION['user']['id'].", UNIX_TIMESTAMP()) 
"); 

return TRUE; ## return TRUE so that ajax knows the file has completed 

?> 

我們獲得在線用戶列表,你可以用一個條件查找您online-status表中,例如,「時間不超過20秒。「

這是一個很好的做法,INSERT數據到一個單獨的數據庫,而不是UPDATEuserlist數據庫中的時間戳。這些往往是相當緩慢。

0

我用time();函數值插入用戶表中的每一次用戶訪問的網頁,並拉出來,並使用此功能,

 echo '<h3>Online Users</h3>'; 
     $query = "SELECT * FROM users"; 
     $data = mysqli_query($dbc, $query); 
     while ($row = mysqli_fetch_array($data)){ 
     if(time() - 10 < $row['active']){ 
     echo '<a href="index.php?action=ucp&uid='.$row['uid'].'">'.$row['username'].'</a>'; 
     } 
     }