大體有兩種思路。
壹是即時刷新型,也就是前臺每隔幾秒向後臺報告壹下自己還在線。在後臺數據庫內或是Application對象中寫入刷新的時間,後臺管理員可以讀取用戶在線時間,如果超過規定的時間未刷新,則可判斷用戶已經離線。這種方式是使用最廣泛的方式,判斷準確無誤,缺點是占用壹定的系統資源,如果在線用戶數量太多,對服務器的負荷壓力比較大。
二是來去報告型。即上線報告自己來了,離線時報告自己走了,不必定時向後臺報告自己是否在線,只要沒報告自己離線,就認為仍然在線。技術上要依賴 DOM 的onload & unload 事件,並在客戶端建立cookie,在onload事件中把打開的網頁數寫入cookie,如cookie("OpenPageCount")++,只有當 cookie("OpenPageCount")==1 時才向後臺報告自己上線,大於1只是說明多打開了幾個網頁而已,不必頻繁向後臺發送ajax請求,在unload事件中再把cookie減1,如cookie("OpenPageCount")--,直到為0才向後臺發送離線狀態ajax請求。這種方式準確率也不錯,不必占用大量的服務器資源,主要工作都在客戶端判斷完成,缺點是兼容性不夠好,筆者測試IE8+、FF等主流瀏覽器支持得都不錯,但壹些廣泛使用的山寨瀏覽器對DOM事件支持不好,如360、遨遊、TT、搜狗等。
相關關鍵技術點:
後臺:數據庫、Application對象、日期間隔
前臺:javascript DOM Event & Cookie & setInterval