[英]Detecting online users: PHP
我正在嘗試通過PHP做出這樣的信息:“當前正在瀏覽此頁面的用戶數量為X”。 我該怎么做? 謝謝。
在網絡上沒有“當前查看”的概念,因為一切都作為非持久連接發生。 可以得到的最接近的結果是“ X個用戶在最近N秒鍾內瀏覽了此頁面”(如果您選擇的N值足夠小,則可以說這幾乎是等效的)。
然后, 要使用戶A在PHP中基於用戶B的操作查看數據,您需要具有一些持久性存儲,通常是像MySQL這樣的數據庫 (但是memcached或xcache也可以工作,如果您不必擔心丟失的話)服務器崩潰時的數據)。
只需將諸如“用戶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)來告訴服務器“我仍在查看”。
通過擴展基本思想
沒有執行此操作的故障安全方法,但是有兩種選擇。
您甚至可以將兩者結合使用。
如果流量很大,則應緩存第一個選項。 您不想在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.