一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - php下統(tǒng)計(jì)用戶在線時(shí)間的一種嘗試

php下統(tǒng)計(jì)用戶在線時(shí)間的一種嘗試

2019-11-07 12:39php教程網(wǎng) PHP教程

一直以來,在web開發(fā)中,準(zhǔn)確統(tǒng)計(jì)用戶在線時(shí)間都是一個(gè)老大難的問題,雖然已經(jīng)有很多人去嘗試各種不同的方案,可是畢竟項(xiàng)目不同,所用到的方法也是千差萬別

下面列出幾個(gè)比較常用的方法: 

首先介紹一下所涉及的數(shù)據(jù)表結(jié)構(gòu),四個(gè)字段: 

復(fù)制代碼代碼如下:


uid<int(10)> :用戶id 
session_id<varchar(40)> :用戶登錄后系統(tǒng)產(chǎn)生的session_id,PHP可是使用session_id()函數(shù)獲取 
login_time<int(10)> :登錄時(shí)間 
logout_time<int(10)> :登出時(shí)間 


1. 客戶端定時(shí)發(fā)送請求到服務(wù)器端。實(shí)現(xiàn)方法是在用戶登錄后,將uid,session_id,login_time插入一條記錄,然后在客戶端js設(shè)定一個(gè)計(jì)時(shí)器,比如每10分鐘向服務(wù)器端發(fā)送一個(gè)請求,以此來達(dá)到更新登出時(shí)間的目的,當(dāng)然這個(gè)間隔時(shí)間設(shè)定的越短,數(shù)據(jù)可能會越準(zhǔn)確,不過相應(yīng)的系統(tǒng)的負(fù)載也會越高,這個(gè)可以根據(jù)實(shí)際情況設(shè)定一個(gè)合適的值。這種方法廣泛應(yīng)用于webgame上,因?yàn)閣ebgame的幾乎所有請求都是ajax請求,不用刷新頁面,一旦刷新頁面,這個(gè)計(jì)時(shí)器就失去了價(jià)值,這也是這個(gè)方法的局限性。 
2. 服務(wù)器設(shè)定一個(gè)定時(shí)輪詢的腳本。這個(gè)方法是在服務(wù)器端寫一個(gè)定時(shí)執(zhí)行的腳本,比如5分鐘執(zhí)行一次,根據(jù)數(shù)據(jù)庫中的記錄來判斷每個(gè)會話的session_id是否還存在于服務(wù)器上,如果存在就更新logout_time,不存在就跳過。這樣也能比較準(zhǔn)確的統(tǒng)計(jì)在線時(shí)間,不過缺點(diǎn)是需要有服務(wù)器的控制權(quán),不然無法設(shè)定定時(shí)腳本,linux系統(tǒng)可以通過crontab實(shí)現(xiàn),windows系統(tǒng)可以通過計(jì)劃任務(wù)來完成。如果你只是買的虛擬主機(jī),那么這個(gè)方法也同樣不適合你。 
3. 在用戶每次活動時(shí)更新一下登出時(shí)間。這樣在用戶不活動或者退出的時(shí)候,登出時(shí)間就自然而然的存在于數(shù)據(jù)庫里了,這也是本文著重討論的方案。下面給出實(shí)現(xiàn)方法。 
首先,在用戶登錄成功后,記錄下其uid,session_id,并將現(xiàn)在時(shí)間作為登陸時(shí)間,現(xiàn)在時(shí)間+600s作為登出時(shí)間,插入數(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); 


然后在用戶每次活動,也就是每點(diǎn)擊一個(gè)頁面時(shí),如果session存在也就是處于登錄狀態(tài)時(shí),更新用戶登出時(shí)間 

復(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)點(diǎn)是相對來說實(shí)現(xiàn)起來比較簡單,能夠適用于大多數(shù)的網(wǎng)站,沒有額外的服務(wù)器需求,而且也可以比較準(zhǔn)確的統(tǒng)計(jì)用戶的在線時(shí)間。 
缺點(diǎn)也很明顯,增加了數(shù)據(jù)庫的更新操作,增加了系統(tǒng)的負(fù)載,不過對于中小型網(wǎng)站來說應(yīng)該不是問題。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品一区二区国语对白 | 手机能看的黄色网站 | 日本高清视频在线观看 | 美女被吸乳老师羞羞漫画 | 久久黄色免费 | 干b视频在线观看 | 好奇害死猫在线观看 | 精品国产一区二区三区久久久狼 | 亚欧毛片基地国产毛片基地 | 午夜电影三级还珠格格 | 99精品国产高清自在线看超 | 国产伦码精品一区二区 | 免费一级毛片完整版在线看 | 大团圆6全文在线阅读 | 九二淫黄大片看片 | 久久视频这只精品99re6 | 大伊香蕉精品视频一区 | 午夜国产 | 男人猛激烈吃奶gif动态图 | 日韩v| 亚洲第一色网 | 好姑娘完整版在线观看中文 | 四虎在线观看 | 日韩一级片在线播放 | 潘甜甜在线观看 | 久久九九亚洲精品 | 亚洲 欧美 另类 中文 在线 | 国产精品99精品久久免费 | 热99精品在线 | 欧美日韩亚洲国内综合网香蕉 | 午夜影院一区二区三区 | 国产自拍视频网站 | 摸逼网 | 我的青梅竹马是消防员2季未增删免费 | 午夜爽喷水无码成人18禁三级 | 免费在线视频一区 | 狠狠的撞进去嗯啊h女强男视频 | 97热在线 | 亚洲精品福利一区二区在线观看 | 全日爱韩国视频在线观看 | 国产成人亚洲精品一区二区在线看 |