2012-07-18 64 views
-2

我創建了一個使用php和ajax的聊天系統。當用戶登錄到此聊天系統時,在表is_online字段狀態已更新爲1.我正在使用此字段列出當前在線成員。如何獲取在線用戶的確切數量在php聊天系統?

我要更新狀態爲0;如果用戶關閉我的網站的所有標籤不按註銷

我該怎麼辦?

+0

看看這個:http://stackoverflow.com/questions/1619930/how-to-check-users-leave-a-page – Peon 2012-07-18 11:47:32

+0

可能的重複[當用戶離開網頁時檢測的最佳方式] (http://stackoverflow.com/questions/147636/best-way-to-detect-when-user-leaves-a-web-page) – JMax 2012-07-19 09:19:16

回答

0

真的很糟糕的方法。


做一個表online_users與領域nametimeout。 存儲用戶的姓名(或ID,或任何其他標識)和當前時間戳+5分鐘(或您決定的不同閾值)。

顯示在線用戶時,請從該表中選擇所有timeout比當前時間戳更大的用戶。 例子:

$time = time(); 
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'"); 

併成立了一個cron,將擦桌子,每天一次。

並且不要忘記更新timeout

-1

我想你應該每5分鐘檢查一次用戶的活動,例如當用戶關閉他的電腦時雅虎msgr顯示雅虎顯示在線狀態yet.but 5分鐘後其顯示脫機。其我的算法。我認爲你不能檢查每一秒,它延遲了你的檢查時間

0

保持表中最後一條消息/動作的軌跡。要更新計數器,請僅選擇那些最後一次操作不超過1分鐘前的操作。而且,如果你願意,使用is_online它這將保持註銷:)

2

的軌道沒有失敗證明,REALTIME,高效方法

從理論上講有NO方式安全地確定瀏覽器的狀態。有事件如DOM onunloadonbeforeunload event。也許你可以附加一個AJAX請求作爲對該事件的迴應。這將設置online=0。但問題是不能保證這個事件總是會發生。 (就像瀏覽器的進程被終止時發生的情況一樣)

唯一的標準解決方案是定期向服務器發送非常輕的AJAX請求。服務器端程序應該爲每個用戶維護lastSeenAtTime字段,並且在某些特定時間內沒有得到請求時(如10分鐘可能會自動設置爲零)