2009-02-02 49 views
4

如何使用PHP實現「誰在線」功能?當然,這涉及使用時間戳,並且在查看phpBB的會話表後,可能涉及將最新訪問存儲在數據庫中。如何在PHP中實現「誰在線」功能?

這是一種有效的方法,還是有更好的方法來實現這個想法?

編輯:我意外地創建了這個社區wiki,因爲那時我還是Stack Overflow的新手。

+0

爲什麼是這個社會維基? :D – andyk 2009-02-02 09:11:06

回答

6

使用數據庫跟蹤每個登錄的人都是實現此目的的唯一方法。

我會做的是,在用戶信息和時間戳插入表中或有人登錄時插入一行,並在每次該用戶有活動時更新時間戳。而且我會假設在過去5分鐘內有活動的所有用戶目前都在線。

+0

「每次用戶都有活動時更新時間戳」,因此,每次用戶打開頁面時,我們都會更新表格? – Sobiaholic 2013-08-16 00:10:09

4

根據您實施(以及如果實施)會話的方式,您可以使用相同的存儲介質來獲取活動用戶的數量。例如,如果您使用基於文件的會話模型,只需掃描包含會話文件的目錄並返回會話文件數。如果您使用數據庫存儲會話數據,請返回會話表中的行數。當然,這是假設您對會話的超時值感到滿意(例如,如果您的會話超時30分鐘,您將在最近30分鐘內獲得活動用戶列表)。

0

我想做到這一點是這樣的:

當,他的用戶名和時間戳的用戶日誌將在一個表中插入。 然後每5分鐘我會通過ajax調用一個php腳本來檢查用戶是否已登錄,如果有,請更新表中的時間戳。

如果用戶沒有登錄,只需刪除他的記錄。

0

有很多方法來實現這一點。

你可以簡單地通過輪詢實現。

按一定的時間間隔檢查客戶端並計算回覆客戶端的數量。

該值可以用作在線用戶的數量。

我認爲更好的方法是使用推送技術,而不是每隔x秒或x分鐘檢查在線人。

它只是讓服務器知道人們什麼時候進入和離開事件。

那麼服務器只是在事件來自客戶端時增加和減少在線用戶計數變量。

我推薦Socket.IO,APE來看看。

也有很多其他的考慮,如XMPP,Jabber

0

我想你可以把它簡單地在PHP

創建表的用戶組成,用戶名,密碼和登錄系統狀態(1,0)

  1. 分析用戶名和密碼的
  2. 然後如果用戶名和密碼匹配,則運行查詢以從表用戶中選擇並獲取它
  3. 然後獲得狀態
  4. 更新用戶,將狀態設置爲1,這意味着在線
  5. 當您從TBL用戶點擊註銷,分析會話的用戶名和密碼,並選擇查詢並得到了狀態,然後將狀態設置爲0則意味着離線