我們?cè)趯?shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)有這樣的需求,就是開(kāi)發(fā)的平臺(tái),需要做一個(gè)在線訪問(wèn)人數(shù)的一個(gè)統(tǒng)計(jì),這個(gè)有什么作用呢?最重要的就是可以讓網(wǎng)站管理者知道這個(gè)網(wǎng)站平臺(tái)的活躍度,是否受歡迎?以及怎樣更好的對(duì)這個(gè)平臺(tái)進(jìn)行宣傳推廣提供數(shù)據(jù)化依據(jù)。
我們要統(tǒng)計(jì)在一段時(shí)間內(nèi)訪問(wèn)站點(diǎn)的人數(shù),可以使用PHP,結(jié)合Mysql以及jQuery,展示一個(gè)統(tǒng)計(jì)在線人數(shù)以及訪客地區(qū)分布的示例。
通常,當(dāng)訪客訪問(wèn)網(wǎng)站時(shí),頁(yè)面記錄用戶的cookie信息,當(dāng)cookie過(guò)期即認(rèn)為用戶不在線。本文中我們使用PHP記錄訪客IP,并在客戶端記錄cookie及過(guò)期時(shí)間,同時(shí)通過(guò)新浪IP地址接口,獲取訪客的地理位置(本例只記錄省份),一并寫入mysql表中,即可統(tǒng)計(jì)一段時(shí)間內(nèi)的訪客總數(shù),也可以查看訪客的地區(qū)分布。
HTML
我們?cè)陧?yè)面上放置一個(gè)顯示當(dāng)前在線人數(shù)的div#total以及一個(gè)用于展示訪客地區(qū)分布的列表#onlinelist,默認(rèn)我們?cè)诹斜碇蟹胖靡粡埮c加載動(dòng)畫(huà)圖片,后面我們用jQuery控制當(dāng)鼠標(biāo)滑向時(shí)展示詳細(xì)列表。
CSS
我們用CSS來(lái)渲染顯示效果,為了就是不讓我們的示例很難看,下面的代碼中,我們使用了CSS3,時(shí)代在進(jìn)步啊,所以建議使用現(xiàn)代瀏覽器預(yù)覽效果。
Mysql
我們要準(zhǔn)備一張數(shù)據(jù)表online,用來(lái)記錄訪客IP、地區(qū)及訪問(wèn)時(shí)間。整個(gè)示例統(tǒng)計(jì)過(guò)程都依賴這張表,其結(jié)構(gòu)如下:
PHP
online.php用來(lái)記錄訪客信息,包括IP地址和地區(qū)。首先檢測(cè)數(shù)據(jù)表中是否有訪客IP記錄,如果有,則只更新訪問(wèn)時(shí)間,否則,獲取用戶省份區(qū)域,并將用戶IP即省份區(qū)域插入到表中。在此,可以判斷是否存在訪客的cookie記錄,如果不存在則向新浪IP地址庫(kù)請(qǐng)求獲取訪客的區(qū)域信息,并設(shè)置cookie值和過(guò)期時(shí)間。最后,我們刪除表中已經(jīng)過(guò)期的記錄,統(tǒng)計(jì)總記錄數(shù)并輸出,詳細(xì)請(qǐng)看代碼注釋。
函數(shù)get_client_ip()用來(lái)獲取用戶真實(shí)IP。
geo.php用來(lái)統(tǒng)計(jì)各省份(區(qū)域)訪客人數(shù)分布。通過(guò)查詢數(shù)據(jù)庫(kù),并按省份分組排序即可,注意我們將最終的數(shù)據(jù)集以JSON的形式輸出,便于前端ajax交互。
jQuery
前端頁(yè)面需要做的是,頁(yè)面加載時(shí)展示訪客總數(shù),即使用ajax請(qǐng)求online.php即可。然后當(dāng)鼠標(biāo)滑向統(tǒng)計(jì)箭頭時(shí),通過(guò)ajax請(qǐng)求geo.php獲取各區(qū)域省份的在線人數(shù),并以下拉的方式展現(xiàn)效果。
溫馨提示:該示例依賴jquery,所以別忘了在頁(yè)面中請(qǐng)先加載jquery庫(kù)。
南昌雅騰教育專注IT職業(yè)技術(shù)培訓(xùn),主要培養(yǎng):PHP軟件開(kāi)發(fā)工程師、WEB前端開(kāi)發(fā)工程師
學(xué)習(xí)熱線:15079188802(程老師)
QQ:1939594233