【ASP.NET MVC】紀錄使用者瀏覽的動作 User Trace Log
近年來網站都會有追蹤使用者的行為動向,而有些使用者動向的紀錄要像某些廠商購買這些服務或是使用免費提供服務,主要的目的是商業分析或是內部紀錄為主,免費的部分有可能不合乎我們整個的需求今天我們就使用MVC中的Filter來取得使用者的紀錄
近年來網站都會有追蹤使用者的行為動向,而有些使用者動向的紀錄要像某些廠商購買這些服務或是使用免費提供服務,主要的目的是商業分析或是內部紀錄為主,免費的部分有可能不合乎我們整個的需求今天我們就使用MVC中的Filter來取得使用者的紀錄
資料庫準備
首先要產生一張資料表,這張資料表是用來記錄使用者的連線資訊,這張表可以自己選擇要記錄那些資訊,自行添加與刪除吧
CREATE TABLE [dbo].[ActionLog](
[LogId] [bigint] IDENTITY(0,1) NOT NULL,
[Operator] [varchar](10) NOT NULL,
[Refer] [varchar](300) NULL,
[Destination] [varchar](300) NOT NULL,
[Method] [varchar](5) NULL,
[MobleDevices] [bit] NOT NULL,
[IPAddress] [varchar](40) NULL,
[RequestTime] [datetime2](7) NOT NULL,
CONSTRAINT [PK_ActionLog_1] PRIMARY KEY CLUSTERED
(
[LogId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
接下來實作MVC的LOG紀錄
在 ASP.NET MVC 有一個機制叫做 ActionFilter,主用用來過濾Client端的要求而且擁有重複利用的功能!
首先專案下新增一個Class檔案,並繼承ActionFilterAttribute,並且複寫OnActionExecuting
public class UserTraceLog : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.UrlReferrer == null)
return;
ActionLogRepository ActionLog = new ActionLogRepository();
ElectronicMenuEntities db = new ElectronicMenuEntities();
ActionLog NewLog =new ActionLog()
{
Refer = filterContext.HttpContext.Request.UrlReferrer.AbsolutePath,
Destination = filterContext.HttpContext.Request.Url.AbsolutePath,
Method = filterContext.HttpContext.Request.HttpMethod,
RequestTime = DateTime.Now,
IPAddress = filterContext.HttpContext.Request.UserHostAddress,
Operator = (HttpContext.Current.User.Identity.IsAuthenticated?HttpContext.Current.User.Identity.Name:"Anonymous")
};
db.ActionLog.Add(NewLog);
db.SaveChanges();
base.OnActionExecuting(filterContext);
}
}
全站套用
既然使用了MVC,那麼就直接在app_Start\FilterConfig.cs中設定全站的套用,必經追蹤不是只有一兩個頁面會使用到
filters.Add(new UserTraceLog());
後記
資料都已記錄在SQL Server中,這時候我們要分析使用者行為可以透或SSRS來做這類的處理,或是產生一些指標性的圖表,這個未來再與大家做分享 ^_^
大家好我是饅頭,希望大家喜歡我的文章
如果有錯誤的地方請不吝指教 ^_^