要求:實現使用者對**網頁的訪問計時,資料越精確越好,擴充套件性越方便越好,對伺服器的影響越小越好.
設計思想:
建立乙個js檔案,在前台頁面只需要引入該js,就可對該頁實現訪問計時.
具體設計與實現:
1,建立表結構
create table pageloginfo
[id] [int] identity(1,1) not null,
[url] [nvarchar](500) null,
[query] [nvarchar](500) null,
[entertime] [datetime] null,
[exittime] [datetime] null,
[username] [varchar](100) null,
id設為主鍵
2,完成js檔案
3,增加httphandler處理程式:
4, 完成記錄資料的類
public class loginfo
/// /// 離開頁面
///
///
public static void updatepagelog(int id)
/// /// 更新沒有離開時間的記錄
///
///
public static void updatecurrentsession(string sessionid)}}
/// /// 用來記錄session與id的表
///
internal class logdatatable : datatable
public void addrow(string sessionid, int id)
}/// /// 如果頁面有回發的結束時間,則將該頁面的標記移除
///
///
public void removeid(int id)
}public string removesession(string sessionid)
}if (ids.length > 0)
ids = ids.remove(0, 1);
return ids;
}}
5,增加global.asax檔案,在session_end裡增加
loginfo.updatecurrentsession(session.sessionid);
6,在web.config中,增加對httphandler的呼叫
好了,至此,對頁面的計時方案完成。
對設計與實現的一些說明:
1,js通過post提交enter引數,獲取伺服器為頁面分配的唯一標記符號。此處是資料庫自增主鍵。 也可以採用其他方式,為頁面分配唯一標識碼。
2,.log是我自定義的一種提交檔案格式,為了採用httphandler,需要將此檔案字尾增加到iis的aspnet_isapi中。否則httphandler不會響應。另外,增加該篩選時將驗證檔案存在的勾務必去掉,否則會報404錯誤。使用httphandler的好處在於,幾乎可以忽略js中提交的路徑問題。
3,存在部分瀏覽器在某些情況下不能回發的情況,因此需要在session過期時,更新這些session下的頁面結束時間。而由於session只保證了在現存session中的唯一性,不保證session的重複性,所以資料庫中不能使用sessionid為更新的識別碼。
4,由於在一般意義上,前台時間不可信,所以,採用伺服器計時。因為不管是在enter還是exit情況下,可以考慮穩定網路中傳輸資料所占用的時間一致,所以該回發的可信程度極高。
5,因為頁面存在登陸等情況,所以在記錄離開時間時,也更新session記錄的使用者名稱。
擴充套件與大型應用:
1,使用者訪問時間可以更精確。
js檔案中增加計時器,在onload時啟動,頁面失去焦點時停止,頁面獲得焦點時重新啟動。在exit時回發計時器記錄的秒數。為了保證資料的可靠性,可以以此秒數與伺服器計算的訪問時間比較,如果小於伺服器記錄秒數,則將提交的資料記錄,否則以伺服器計時為準。
2,處理iframe的情況
檔案中增加js判斷該頁面是否處於iframe中,如果是,則判斷父頁是否引用了該js檔案,如果引用了,則不回發enter。
3,如果需要計時的頁面很多,服務端可以採用快取技術,來提高資料響應速度,而不需要直接寫庫。
4,以後哪個頁面需要計時了,直接引入js檔案,ok了。
5,可以針對特定頁面,可以跑一些任務,來實現計時統計。
一些額外說明:
網路計時特別是web計時,由於瀏覽器、網路或者人為等因素,不可能做到精準,所以只能盡量去做到準確。
C 中的高精度計時方法(納秒級別計時)
queryperformancecounter獲得cpu執行計數值 精確的時間計量方法在某些應用程式中是非常重要的。常用的 windows api 方法 gettickcount 返回系統啟動後經過的毫秒數。另一方面,gettickcount 函式僅有 1ms 的分辨精度,很不精確。故而,我們要另外...
後端倒計時 php,簡單的PHP實現倒計時方法
todo count down 倒 計時 param string endtime return string time example endtime 2014 07 13 8 15 00 echo countdown endtime function countdown endtime endt...
Windows下用C C 精確到微秒的計時方法
windows下用c c 精確到微秒的計時方法 large integer在64位系統中是longlong,在32位系統中是高低兩個32位的long,在windows.h中通過預編譯巨集作定義。標頭檔案large integer nfreq large integer在64位系統中是longlong...