之前在《一種基於自定義代碼記錄用戶訪問日志在Sharepoint網站的應用方法!》一文利用本人幾年前的開發的UserVisitLogsHelp組件進行了網站用戶訪問日志記錄,可用於網站分析,雖然IIS可以有日志記錄的功能(也可通過工具分析),但它的主要缺點是可定制性相對較差,難以滿足個性化的需求,只能用於windows平台的站點,有很大的局限性。通過該組件不僅能用於asp.net等windows平台網站,也可以用於PHP、JSP等Linux網站。該組件目前已在Codeplex網站中開源了,具體網址如下:http://uservisitlogshelp.codeplex.com/。
該組件實現原理很簡單:主要利用IHttpModule接口並在Web.config中的HttpModule節點添加此組件的配置,考慮到性能和可移植性,數據庫采用開源Sqlite,方便維護和數據采集。
Sqlite日志數據庫網站用戶訪問日志表(UserVisitLog)結構設計如下:
編號 |
字段名稱 |
字段類型 |
備注 |
1 |
Id |
integer |
自增序號(PK,Not Null) |
2 |
UserHostAddress |
varchar(20) |
遠程客戶端的IP主機地址 |
3 |
UserHostName |
varchar(20) |
遠程客戶端的DNS名稱 |
4 |
UrlAbsoluteUri |
varchar(1600) |
當前請求的絕對URI |
5 |
PhysicalPath |
varchar(500) |
當前請求的URL相對應的物理文件路徑 |
6 |
UserAgent |
varchar(1000) |
客戶端瀏覽器的原始用戶代理信息 |
7 |
HttpMethod |
varchar(4) |
客戶端使用的HTTP數據傳輸方法 |
8 |
UserLanguages |
varchar(20) |
客戶端語言首選項的排序字符 |
9 |
UrlHost |
varchar(100) |
客戶端主機的實例名 |
10 |
UrlPort |
varchar(10) |
當前URI的端口號 |
11 |
TotalBytes |
integer |
當前輸入流中的字節數 |
12 |
ContentLength |
integer |
客戶端發送的內容長度(以字節計) |
13 |
IsLocal |
varchar(5) |
當前請求是否來自本地計算機 |
14 |
BrowserType |
varchar(30) |
瀏覽器的名稱和主(整數)版本號 |
15 |
BrowserVersion |
varchar(20) |
瀏覽器的完整版本號(包括整數和小數) |
16 |
BrowserPlatform |
varchar(20) |
客戶端使用的操作系統平台名稱 |
17 |
BrowserBeta |
varchar(5) |
瀏覽器是否為測試版 |
18 |
BrowserActiveXControls |
varchar(5) |
瀏覽器是否支持ActiveX控件 |
19 |
BrowserCookies |
varchar(5) |
瀏覽器是否支持Cookie |
20 |
BrowserCrawler |
varchar(5) |
瀏覽器是否為Web爬行遍歷搜索引擎 |
21 |
BrowserJavaScript |
varchar(5) |
瀏覽器支持的EcmaScript主版本號 |
22 |
BrowserSupportsXmlHttp |
varchar(5) |
瀏覽器是否支持通過HTTP接收XML |
23 |
BrowserInputType |
varchar(30) |
瀏覽器支持的輸入類型 |
24 |
BrowserScreenPixelsWidth |
integer |
瀏覽器顯示的近似寬度(單位像素) |
25 |
BrowserScreenPixelsHeight |
integer |
瀏覽器顯示的近似高度(單位像素) |
26 |
UrlReferrerAbsoluteUri |
varchar(1600) |
客戶端上次請求(該請求鏈接當前的URL)的絕對URI |
27 |
UrlReferrerAbsoluteUriDecode |
varchar(1600) |
對UrlReferrerAbsoluteUri字段進行zh-cn或utf-9解碼 |
28 |
UrlReferrerHostName |
varchar(100) |
客戶端上次請求(該請求鏈接當前的URL)的DNS名稱 |
29 |
CanCombineFormsInDeck |
varchar(5) |
瀏覽器是否支持包括多個窗口的卡片組 |
30 |
IsMobileDevice |
varchar(5) |
瀏覽器是否為已識別的移動設備 |
31 |
MobileDeviceManufacturer |
varchar(30) |
已知移動設備制造商的名稱 |
32 |
MobileDeviceModel |
varchar(30) |
已知移動設備的型號名 |
33 |
NumberOfSoftkeys |
integer |
移動設備上軟鍵的數目 |
34 |
ContentEncoding |
varchar(10) |
內容字符的編碼 |
35 |
ScreenBitDepth |
integer |
瀏覽器顯示的近似深度(單位像素) |
36 |
Website |
varchar(100) |
訪問Web站點 |
37 |
WebCookies |
varchar(80) |
記錄當前訪客的惟一Cookies值 |
38 |
VisitTime |
varchar(20) |
當前請求訪問時間 |
三種典型的應用場景:
<add name="WebsiteVisit" type="NetOpen_System.Component.WebsiteVisitHttpModule, NetOpen_System.Component.WebsiteVisit"/>
</httpModules>
SP.SOD.executeOrDelayUntilScriptLoaded(runMyCode, "SP.js");
var currentUser = null;
var currentUserTitle=null;
function runMyCode() {
var ctx = new SP.ClientContext.get_current();
var web = ctx.get_web();
ctx.load(web);
var user = web.get_currentUser();
user.retrieve();
ctx.executeQueryAsync(
function () {
//only in the success case you can work with user login
currentUser= user.get_loginName();
currentUserTitle = user.get_title();
document.getElementById("randimg").src="http://webloggersite/Default.aspx?UserName=" +currentUser+"&UserTitle="+currentUserTitle;
},
function (data) {
//notify the failure
});
}
</script>
<img id="randimg" name="randimg" src="" style="width:0;height:0;" />
function addImg(isrc) {
var Img = new Image();
Img.style = "width:0;height:0;";
Img.onload = function () {
document.body.appendChild(Img);
}
Img.src = isrc;
}
addImg("http://webloggersite/Default.aspx");
</script>
<img id="randimg" name="randimg" src="" style="width:0;height:0;" />
<NetOpen_System>
<WebsiteVisit>
<!--DateSource Automatic Generation of Database File year:one year month:every month day:every day None:Does not generate -->
<SQLiteConnectings DataSource="~/Visit_Data/HomeWeb" Password="12345678" DateSource="day" Website="" ExcludeUrl="" DecodeUrl="" TextDecoding="utf-8" ExcludeUserAgent="" WebCookiesName="" WebCookiesExpires="3650"/>
</WebsiteVisit>
</NetOpen_System>
本博客為軟件人生原創,歡迎轉載,轉載請標明出處:http://www.cnblogs.com/nbpowerboy/p/3158507.html。演繹或用於商業目的,但是必須保留本文的署名軟件人生(包含鏈接)。如您有任何疑問或者授權方面的協商,請給我留言。SharePoint商業智能技術QQ群:140668362,.Net技術交流QQ群:195516928,歡迎各位加入交流。 |