2010-12-11 57 views
2

我試圖通過PHP說「X個用戶正在查看此頁面」。我將如何做到這一點?謝謝。正在檢測在線用戶:PHP

+0

如果你有大量的流量,這不是一個好主意。 – 2010-12-11 21:08:05

+2

這個問題應該回答你的問題:http://stackoverflow.com/questions/890820/find-out-how-many-users-are-online-in-php – thejh 2010-12-11 21:08:49

回答

1

這樣做沒有失敗的方法,但有幾個選項。

  1. 保存上次訪問數據庫的人。如果它在一定的閾值內(比如5分鐘),他們就在線。
  2. 這種方式不太可靠,但偶爾會ping(正確的術語?)帶有AJAX的服務器,告訴它你仍然在線。這使得用戶可以長時間瀏覽頁面,而不會超出其「在線」時間。

你甚至可以使用這兩者的組合。

如果你有很多流量,你應該緩存第一個選項。對於每個頁面加載,您都不想運行SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000。另一種選擇是每隔一分鐘左右運行一次守護進程,並將在線用戶存儲在單獨的表中。

注意:這假設你真的意思是用戶,當你說它。如果您想要客人的人數在線,請參閱@ code_burgar的答案。

0

你真的不能這樣做,因爲你不知道某人何時停止瀏覽頁面。

2
  1. 創建一個數據庫表,其存儲:
    • 用戶IP及USERAGENT組合
    • 時間戳
  2. 在每個頁面加載,用戶IP及USERAGENT組合的存儲的哈希與電流沿的哈希時間戳記到數據庫中
  3. 查詢數據庫以查找具有落入NOW()的時間戳的唯一條目的數量 - X分鐘範圍
  4. 活躍用戶的10
  5. 顯示概數

通過

  1. 有一個間隔展開的基本思路催生了AJAX調用一個腳本,更新數據庫,以考慮用戶停留在頁面上比X長分鐘
+0

這個答案將用於統計在線「客人」的數量。 – Jonah 2010-12-11 21:13:18

+0

由於OP沒有具體說明他認爲「用戶」是什麼,您的評論可能與您的評論相關:) – 2010-12-11 21:14:55

4

網絡上沒有「正在查看」的概念,因爲所有事情都是非永久性連接。您可以得到的最接近的結果是「X個用戶在過去的N秒內瀏覽過此頁面」(如果您選擇的值足夠小,您可以說它幾乎相當)。

然後,有用戶根據用戶B的動作視圖數據,在PHP中,你需要有一定的持久性存儲,通常像MySQL的(但數據庫memcached的了XCache可以工作,以及,如果你真的不擔心在服務器崩潰時丟失數據)。

只需將諸如「在時間Z處將用戶X查看的頁面Y」等項目寫入永久存儲器,並且在顯示頁面Y時,在過去的N秒內查詢頁面Y的所有視圖的存儲並計算該數量不同的用戶。

在SQL:

INSERT INTO visits (user, page, time) VALUES (?,?,NOW()) 

SELECT COUNT(DISTINCT user) FROM visits 
WHERE page = ? AND time < NOW() - INTERVAL 10 SECONDS 

你可以讓用戶通過定期提交AJAX請求(或爲你的頁面上的一個小iframe重新加載本身每隔幾秒鐘告訴服務器「我還在看」沒有JavaScript)。

+0

對於