簡體   English   中英

檢測在線用戶:PHP

[英]Detecting online users: PHP

我正在嘗試通過PHP做出這樣的信息:“當前正在瀏覽此頁面的用戶數量為X”。 我該怎么做? 謝謝。

在網絡上沒有“當前查看”的概念,因為一切都作為非持久連接發生。 可以得到的最接近的結果是“ X個用戶在最近N秒鍾內瀏覽了此頁面”(如果您選擇的N值足夠小,則可以說這幾乎是等效的)。

然后, 要使用戶A在PHP中基於用戶B的操作查看數據,您需要具有一些持久性存儲,通常是像MySQL這樣的數據庫 (但是memcachedxcache也可以工作,如果您不必擔心丟失的話)服務器崩潰時的數據)。

只需將諸如“用戶X在時間Z查看了頁面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)來告訴服務器“我仍在查看”。

  1. 創建一個存儲以下內容的數據庫表:
    • 用戶IP和Useragent組合的哈希
    • 時間戳
  2. 每次頁面加載時,將用戶IP和Useragent組合的哈希以及當前時間戳存儲到數據庫中
  3. 查詢數據庫以獲取時間戳落在NOW()-X分鍾范圍內的唯一條目數
  4. 顯示活動用戶的大概數量

通過擴展基本思想

  1. 間隔產生對腳本的AJAX調用,該腳本將更新db以說明用戶在頁面上停留了超過X分鍾的時間

沒有執行此操作的故障安全方法,但是有兩種選擇。

  1. 在數據庫中保存該人上次訪問的時間。 如果在一定閾值之內(例如5分鍾),則表明他們在線。
  2. 這種方式不太可靠,但有時會使用AJAX對服務器進行ping( 正確的稱呼? ),以告訴您您仍然在線。 這使用戶可以長時間翻頁,而不會使其“在線”時間超時。

您甚至可以將兩者結合使用。

如果流量很大,則應緩存第一個選項。 您不想在SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000為每個頁面加載SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000運行SELECT * FROM users WHERE lastvisit > UNIX_TIMESTAMP() - 18000 另一種選擇是每分鍾左右運行一次守護程序,然后將在線用戶存儲在單獨的表中。

注意 :這里假設您說的用戶。 如果要在線邀請嘉賓人數,請參閱@code_burgar的答案。

創建一個帶時間的會話變量:

$_SESSION['time']=time();
$time=time();
$query="INSERT INTO `online`(`name`, `time`)VALUES ('$name','$time')";

**// insert the time and username into the DB..**
if(time() - $_SESSION['time'] >=60)

**//check for ths condition if the user is available do the same thing again**
$_SESSION['time']=time();
$time=time();

$query="INSERT INTO `online`(`name`, `time`)VALUES ('$name','$time')";

檢索在線用戶時:

$t=time();

// this will help u to remove the records that are not useful for u.
// **thus helping you to use less space on your database**
mysql_query("DELETE from online WHERE '$t'-time >60");

最后,執行:mysql_query(“ SELECT * FROM online”);

您確實不能這樣做,因為您不知道何時有人停止查看頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM