php實現(xiàn)用戶在線時間統(tǒng)計詳解
更新時間:2011年10月08日 19:49:38 作者:
php實現(xiàn)用戶在線時間統(tǒng)計詳解,需要的朋友可以參考下。
首先介紹一下所涉及的數(shù)據(jù)表結(jié)構(gòu),四個字段:
代碼如下:
uid<int(10)> :用戶id
session_id<varchar(40)> :用戶登錄后系統(tǒng)產(chǎn)生的session_id,PHP可是使用session_id()函數(shù)獲取
login_time<int(10)> :登錄時間
logout_time<int(10)> :登出時間
1、客戶端定時發(fā)送請求到服務(wù)器端。實現(xiàn)方法是在用戶登錄后,將uid,session_id,login_time插入一條記錄,然后在客戶端js設(shè)定一個計時器,比如每10分鐘向服務(wù)器端發(fā)送一個請求,以此來達(dá)到更新登出時間的目的,當(dāng)然這個間隔時間設(shè)定的越短,數(shù)據(jù)可能會越準(zhǔn)確,不過相應(yīng)的系統(tǒng)的負(fù)載也會越高,這個可以根據(jù)實際情況設(shè)定一個合適的值。這種方法廣泛應(yīng)用于webgame上,因為webgame的幾乎所有請求都是ajax請求,不用刷新頁面,一旦刷新頁面,這個計時器就失去了價值,這也是這個方法的局限性。
2、務(wù)器設(shè)定一個定時輪詢的腳本。這個方法是在服務(wù)器端寫一個定時執(zhí)行的腳本,比如5分鐘執(zhí)行一次,根據(jù)數(shù)據(jù)庫中的記錄來判斷每個會話的 session_id是否還存在于服務(wù)器上,如果存在就更新logout_time,不存在就跳過。這樣也能比較準(zhǔn)確的統(tǒng)計在線時間,不過缺點是需要有服務(wù)器的控制權(quán),不然無法設(shè)定定時腳本,linux系統(tǒng)可以通過crontab實現(xiàn),windows系統(tǒng)可以通過計劃任務(wù)來完成。如果你只是買的虛擬主機,那么這個方法也同樣不適合你。
3、在用戶每次活動時更新一下登出時間。這樣在用戶不活動或者退出的時候,登出時間就自然而 然的存在于數(shù)據(jù)庫里了,這也是本文著重討論的方案。下面給出實現(xiàn)方法。
首先,在用戶登錄成功后,記錄下其uid,session_id,并將現(xiàn)在時間作為登陸時間,現(xiàn)在時間 600s作為登出時間,插入數(shù)據(jù)庫。
代碼如下:
$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存在也就是處于登錄狀態(tài)時,更新用戶登出時間
代碼如下:
if($_SESSION[uid]){
$uid = $_SESSION[uid];
$session_id = $_SESSION[session_id];
$logout_time = time() 600;
$sql = "UPDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND session_id=$session_id";
mysql_query($sql);
}
這種方法的優(yōu)點是相對來說實現(xiàn)起來比較簡單,能夠適用于大多數(shù)的網(wǎng)站,沒有額外的服務(wù)器需求,而且也可以比較準(zhǔn)確的統(tǒng)計用戶的在線時間。
缺點也很明顯,增加了數(shù)據(jù)庫的更新操作,增加了系統(tǒng)的負(fù)載,不過對于中小型網(wǎng)站來說應(yīng)該不是問題。
代碼如下:
復(fù)制代碼 代碼如下:
uid<int(10)> :用戶id
session_id<varchar(40)> :用戶登錄后系統(tǒng)產(chǎn)生的session_id,PHP可是使用session_id()函數(shù)獲取
login_time<int(10)> :登錄時間
logout_time<int(10)> :登出時間
1、客戶端定時發(fā)送請求到服務(wù)器端。實現(xiàn)方法是在用戶登錄后,將uid,session_id,login_time插入一條記錄,然后在客戶端js設(shè)定一個計時器,比如每10分鐘向服務(wù)器端發(fā)送一個請求,以此來達(dá)到更新登出時間的目的,當(dāng)然這個間隔時間設(shè)定的越短,數(shù)據(jù)可能會越準(zhǔn)確,不過相應(yīng)的系統(tǒng)的負(fù)載也會越高,這個可以根據(jù)實際情況設(shè)定一個合適的值。這種方法廣泛應(yīng)用于webgame上,因為webgame的幾乎所有請求都是ajax請求,不用刷新頁面,一旦刷新頁面,這個計時器就失去了價值,這也是這個方法的局限性。
2、務(wù)器設(shè)定一個定時輪詢的腳本。這個方法是在服務(wù)器端寫一個定時執(zhí)行的腳本,比如5分鐘執(zhí)行一次,根據(jù)數(shù)據(jù)庫中的記錄來判斷每個會話的 session_id是否還存在于服務(wù)器上,如果存在就更新logout_time,不存在就跳過。這樣也能比較準(zhǔn)確的統(tǒng)計在線時間,不過缺點是需要有服務(wù)器的控制權(quán),不然無法設(shè)定定時腳本,linux系統(tǒng)可以通過crontab實現(xiàn),windows系統(tǒng)可以通過計劃任務(wù)來完成。如果你只是買的虛擬主機,那么這個方法也同樣不適合你。
3、在用戶每次活動時更新一下登出時間。這樣在用戶不活動或者退出的時候,登出時間就自然而 然的存在于數(shù)據(jù)庫里了,這也是本文著重討論的方案。下面給出實現(xiàn)方法。
首先,在用戶登錄成功后,記錄下其uid,session_id,并將現(xiàn)在時間作為登陸時間,現(xiàn)在時間 600s作為登出時間,插入數(shù)據(jù)庫。
代碼如下:
復(fù)制代碼 代碼如下:
$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存在也就是處于登錄狀態(tài)時,更新用戶登出時間
代碼如下:
復(fù)制代碼 代碼如下:
if($_SESSION[uid]){
$uid = $_SESSION[uid];
$session_id = $_SESSION[session_id];
$logout_time = time() 600;
$sql = "UPDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND session_id=$session_id";
mysql_query($sql);
}
這種方法的優(yōu)點是相對來說實現(xiàn)起來比較簡單,能夠適用于大多數(shù)的網(wǎng)站,沒有額外的服務(wù)器需求,而且也可以比較準(zhǔn)確的統(tǒng)計用戶的在線時間。
缺點也很明顯,增加了數(shù)據(jù)庫的更新操作,增加了系統(tǒng)的負(fù)載,不過對于中小型網(wǎng)站來說應(yīng)該不是問題。
您可能感興趣的文章:
相關(guān)文章
PHP實現(xiàn)網(wǎng)站應(yīng)用微信登錄功能詳解
這篇文章主要介紹了PHP實現(xiàn)網(wǎng)站應(yīng)用微信登錄功能,結(jié)合實例形式詳細(xì)分析了php實現(xiàn)微信授權(quán)登錄功能的具體操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-04-04php中magic_quotes_gpc對unserialize的影響分析
這篇文章主要介紹了php中magic_quotes_gpc對unserialize的影響,以實例的形式分析了magic_quotes_gpc安全過濾對unserialize造成的影響以及對此的解決方法,非常具有實用價值,需要的朋友可以參考下2014-12-12PHP圖片處理之圖片旋轉(zhuǎn)和圖片翻轉(zhuǎn)實例
這篇文章主要介紹了PHP圖片處理之圖片旋轉(zhuǎn)和圖片翻轉(zhuǎn)實例,本文使用imagerotate函數(shù)實現(xiàn),自定義了多個函數(shù)來實現(xiàn)功能需求,需要的朋友可以參考下2014-11-11