以下列出幾個比較常用的方法:
先介紹一下所涉及的資料表結構,四個欄位:
複製程式碼 程式碼如下:
uid :使用者id
session_id :使用者登入後系統產生的session_id,PHP可是使用session_id()函數取得
login_time :登入時間
logout_time :登出時間
1. 客戶端定時發送請求到伺服器端。實作方法是在使用者登入後,將uid,session_id,login_time插入一筆記錄,然後在客戶端js設定計時器,例如每10分鐘向伺服器端發送請求,以達到更新登出時間的目的,當然這個間隔時間設定的越短,數據可能會越準確,不過相應的系統的負載也會越高,這個可以根據實際情況設定一個合適的值。這種方法廣泛應用於webgame上,因為webgame的幾乎所有請求都是ajax請求,不用刷新頁面,一旦刷新頁面,這個計時器就失去了價值,這也是這個方法的限制。
2. 伺服器設定一個定時輪詢的腳本。這個方法是在伺服器端寫一個定時執行的腳本,例如5分鐘執行一次,根據資料庫中的記錄來判斷每個會話的session_id是否還存在於伺服器上,如果存在就更新logout_time,不存在就跳過。這樣也能比較準確的統計在線時間,不過缺點是需要有伺服器的控制權,不然無法設定定時腳本,linux系統可以透過crontab實現,windows系統可以透過排程任務來完成。如果你只是買的虛擬主機,那麼這個方法也同樣不適合你。
3. 在使用者每次活動時更新一下登出時間。這樣在使用者不活動或退出的時候,登出時間就自然而然的存在於資料庫裡了,這也是本文著重討論的方案。下面給出實作方法。
首先,在使用者登入成功後,記錄下其uid,session_id,並將現在時間作為登陸時間,現在時間+600s作為登出時間,插入資料庫。
複製程式碼 程式碼如下:
$uid = $_SESSION['uid'] = $info['id'] ;
$session_id = $_SESSION['session_id'] = session_id();
$login_time = time();
$logout_time = time()+600;
$sql = "INSERT INTO member_login (uid,session_id,login_time,logout_time) values($uid,'$session_id',$login_time,$logout_time)";
mysql_query($sql);
然後在使用者每次活動,也就是每點擊一個頁面時,當session存在也就是處於登入狀態時,更新使用者登出時間
複製程式碼 代碼如下:
if($_SESSION['uid']){
$uid = $_SESSION['uid'];
$session_id = $_SESSION['session_id'];
$session_id = $_SESSION['session_id'];
; $logout_time = time()+600;
$sql = "UPDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND sessi
mysql_query($sql);
}
}
這種方法的優點是相對來說實現起來比較簡單,能夠適用於大多數的網站,沒有額外的伺服器需求,而且也可以比較準確的統計用戶的線上時間。增加了資料庫的更新操作,增加了系統的負載,不過對於中小型網站來說應該不是問題。
以上就介紹了在線北京時間 php下統計用戶在線時間的一種嘗試,包括了在線北京時間方面的內容,希望對PHP教程有興趣的朋友有所幫助。