首先,在伺服器端進行統計,我個人感覺應該不可以吧,因為http協議是無狀態的,瀏覽器與伺服器之間並不會建立持久串連。這意味著當一個用戶端向伺服器端發出請求,然後Web伺服器返迴響應,串連就被關閉了。
所以就無法在伺服器端對使用者訪問某個頁面的時間長度進行統計了,只能統計出某個使用者訪問某個頁面的具體時間吧?
請問,該如何?這個需求呢?
註:在不適用第三方流量統計器的情況下
回複內容:
首先,在伺服器端進行統計,我個人感覺應該不可以吧,因為http協議是無狀態的,瀏覽器與伺服器之間並不會建立持久串連。這意味著當一個用戶端向伺服器端發出請求,然後Web伺服器返迴響應,串連就被關閉了。
所以就無法在伺服器端對使用者訪問某個頁面的時間長度進行統計了,只能統計出某個使用者訪問某個頁面的具體時間吧?
請問,該如何?這個需求呢?
註:在不適用第三方流量統計器的情況下
看你要精確到什麼顆粒度了
方案1:websocket
前端開個長串連,後台統計長連線時間。
方案2:ajax輪詢
隔幾秒發一個查詢,後台記錄第一與最後一個查詢間隔時間
一般的方法都是記錄每次請求的日誌(包括uv標示,當前url,來源url,瀏覽器資訊,ip,訪問時間等),這些初始日誌就可以分析出某個使用者在某個url上停留多久(下一個頁面請求時間-當頁面時間),當然更精細的就要考慮tab頁或新視窗問題。如果是最後一個頁面訪問,這種方式就很難獲知停留時間了。
ajax定時提交當然可以解決,只是為了一個停留時間資料(這資料相對沒有那麼重要,誤差較大),每個頁面做一個定時ajax感覺還是小題大做了。當然如果你的ajax還提交其他資訊(比如使用者在頁面上捲軸位置),那倒是可以嘗試下的。
問題簡單化:當使用者每次發起一個http請求的時候記錄url和時間戳記,然後你後台計算不同類型的(即相同url,參數不一樣)間隔時間,最後能夠得出使用者在不同類型頁面的停留時間。
現在有些app應用就是只有一個頁面,但你也可以通過url中的hash來區分不同的請求類型並加以計算,這樣你就能夠統計出使用者在某個頁面的停留時間。
如果是全部採用ajax方式載入的花只能對不同的請求地址進行計算了。
前提是你要使用一個並發量支援度很高的緩衝系統,並且該緩衝系統能夠為你進行一些簡單的數學計算,有幸的是市場上已經有了,你自己選個最能配合你出色完成任務的產品吧。
不是很懂這些 不過AJAX不是可以在網頁切換的時候掛上些行為嗎?不能把資料發給伺服器?
http://www.bangfx.com/research/?p=651
這個連結好像有點類似,給出瞭解決的思路
window的unload裡可以做一些東西,在localStorage裡
window.load(把上一次的發出去,產生一個起始時間點記錄)
window.unload(產生一個結束時間點,計算一下停留時間,存到localStorage裡)
這樣一個使用者只有唯一的最後一次訪問沒有記錄,而不是每個session最後一次都沒有記錄
1、關閉視窗或者跳轉的時候會觸發window.onbeforeunload函數,可以再該函數中做處理(有相容性問題)
2、統計完資料記錄到本地cookies中,一段時間後統一發送
不過還是覺得ajax和websocket靠譜一點