頁面停留訪問計時方案的設計與實現

2021-05-28 02:36:42 字數 2745 閱讀 6120

要求:實現使用者對**網頁的訪問計時,資料越精確越好,擴充套件性越方便越好,對伺服器的影響越小越好.

設計思想:

建立乙個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...