2012-07-19 60 views
0

我想在我的網站上顯示所有用戶都在線(實時;如同任何聊天模塊)。我正在使用下面提到的腳本來做到這一點。如何在我的網站上獲取用戶在線狀態(實時)

HTML:

<body onbeforeunload="Unload();" onmousedown="checkfunction();"> 

</body> 

的Javascript:

var doClose = false; 

document.onkeydown = checkKeycode; 

function checkKeycode(e){ 
var keycode; 
if (window.event) 
keycode = window.event.keyCode; 
else if (e) 
keycode = e.which; 
if(keycode == 17){ 
    doClose = true; 
} 
} 

function checkfunction(){ 
doClose = true; 
} 

function Unload(){ 
if(!doClose){ 
    set_user_log_out(<?php ehco $u_id ?>); 
} 
} 

的set_user_log_out功能是設置用戶註銷。

在上面提到的java腳本中,我想考慮下面提到的場景。

  1. 用戶可以在瀏覽器中打開多個選項卡。或者,他可能會打開多個瀏覽器(僅限於同一瀏覽器)。
  2. 用戶可以關閉一個選項卡並訪問另一個選項卡。
  3. 用戶可以點擊一個標籤並簡單地關閉另一個標籤。
  4. 用戶可能關閉瀏覽器而不點擊註銷選項。
  5. 用戶可以使用鍵盤快捷鍵關閉瀏覽器(例如,ctrl + F4)。

所以,我正在檢查鍵碼(哪個鍵已被鍵盤按下)以及。 但是,這段代碼存在一些問題。下面提到了它們。

  • 我還沒有找到任何解決方案,使多張鍵的鍵碼(用於如:Ctrl + F4)
  • 考慮兩個選項卡,如果鍵入其他URL(同一站點中),該網頁會加載在Firefox中。
  • ctrl + r不能正常工作。
  • 有時試圖訪問該網站的其他頁面,它只是執行功能「set_user_log_out()」(發生在只有火狐)

請建議我這樣做的要緊。我也經歷了下面提到的網址。

How to Track the Online Status of Users of my WebSite?

但在上述網址所描述的功能,不考慮我的情況。

在此先感謝。

回答

2

您應該保留數據庫中活動會話的列表與上次活動時間。

在對服務器的每次請求中,您都應該更新上次請求的特定會話的活動時間。 「在線用戶」是信賴這個表,可以說,最後一項活動< 1分鐘前

在註銷功能,你也應該從這個表中刪除特定的會話

+0

「活動會話」存儲在麗表..想我已經打開兩個標籤並點擊「註銷」選項從一個標籤,這將是什麼情景? – Debashis 2012-07-19 09:37:43

+1

如果是相同的用戶(同一個會話),比用戶在這兩個過程中的退出 - 你應該增加檢查每一個X秒,如果用戶仍然處於登錄狀態 - 如果不是 - 重定向用戶登錄 – 2012-07-19 10:28:20

+0

頁而且,假設登錄用戶只需關閉瀏覽器(無需點擊註銷選項)。那麼,哪些狀態(可用/註銷)將被檢索以及如何? – Debashis 2012-07-19 11:06:55

0

爲了讓這個想法耶給你「實時「你需要添加一些Ajax。使用ajax,您可以在不離開頁面的情況下檢查在線用戶。此外,你可以添加一個客場狀態,你的數據庫,這意味着:檢查用戶仍然在頁面上,但不會做任何動作等,這是一個很簡單的方法:)

0

我有一個PHP腳本店所有在JSON文件在線用戶..比我使用jQuery每個用戶

function getAllUsers(){ 
    $.getJSON('online.php',function(data){ 
    $.each(data, function(i, data){ 
     if(data.user_status == 'online') { 
      $("#online-user") 
      .append("<tr><td>" + data.user_id + "</td><td>" 
        + data.user_name + "</td><td>" 
        + data.user_status + "</td></tr>)"); 
     } 
    }); 
    }) 
} 
相關問題