public PageView(UserSessionInformation userInfo, string pageFriendlyURL) { PageFriendlyURL = pageFriendlyURL; IpAddress = userInfo.IpAddress; BrowserNameAndVersion = userInfo.BrowserNameAndVersion; OperatingSystem = userInfo.OperatingSystem; SessionId = userInfo.SessionId; }
protected void Session_Start(object sender, EventArgs e) { Parser UAParser = Parser.GetDefault(); ClientInfo ClientInfo = UAParser.Parse(Request.UserAgent); UserSessionInformation UserInfo = new UserSessionInformation(); UserInfo.IpAddress = Request.ServerVariables["REMOTE_ADDR"]; UserInfo.BrowserNameAndVersion = ClientInfo.UserAgent.Family + " " + ClientInfo.UserAgent.Major; UserInfo.OperatingSystem = ClientInfo.OS.Family + " " + ClientInfo.OS.Major; UserInfo.SessionId = Guid.NewGuid(); UserInfo.IsBot = Regex.IsMatch(Request.UserAgent, @"bot|crawler|baiduspider|80legs|ia_archiver|voyager|curl|wget|yahoo! slurp|mediapartners-google", RegexOptions.IgnoreCase); SiteContext.UserSessionInfo = UserInfo; }
/// <summary> /// Record a page view /// </summary> /// <param name="pageView"></param> /// <returns></returns> public static bool SaveNew(PageView pageView, bool allowPageReportRecording, UserSessionInformation userInfo) { //if reportings in enabled, and the user is not a bot, and it's been at least 2 seconds since their last page view if (allowPageReportRecording && !userInfo.IsBot && (DateTime.UtcNow - userInfo.LastDatePageRecordedUTC).TotalSeconds >= 2) { bool SaveSuccessful = false; SaveSuccessful = UpdateLastPageUserWasOn(allowPageReportRecording, userInfo); if (pageView.PageOpenedDateUTC.Equals(DateTime.MinValue)) { pageView.PageOpenedDateUTC = DateTime.UtcNow; } //record the current page view return Execute.Save<PageView>(COLLECTION_NAME, pageView); } return true; }
/// <summary> /// Grab the last page the user visted if exists and update the exit time /// </summary> /// <param name="sessionId"></param> /// <returns></returns> public static bool UpdateLastPageUserWasOn(bool allowPageReportRecording, UserSessionInformation userInfo) { if (allowPageReportRecording && !userInfo.IsBot) { MongoCollection<PageView> Collection = Execute.GetCollection<PageView>(COLLECTION_NAME); //grab the last viewed page and set the exit time if exists PageView LastPageView = (from e in Collection.AsQueryable<PageView>() where e.SessionId == userInfo.SessionId orderby e.PageOpenedDateUTC descending select e).FirstOrDefault(); if (LastPageView != null && LastPageView.SessionId.Equals(userInfo.SessionId)) { //only update if was not set before, the exit time will already be set whenever the tab was closed and the session ends 20 mins later if (LastPageView.PageExitDateUTC.Equals(DateTime.MinValue)) { LastPageView.PageExitDateUTC = DateTime.UtcNow; return Execute.Save<PageView>(COLLECTION_NAME, LastPageView); } } } return true; }
/// <summary> /// Record a new page view /// </summary> /// <param name="pageName"></param> public static void RecordPageView(string pageName) { try { UserSessionInformation UserInfo = UserSessionInfo; //record the page view Chimera.DataAccess.ReportDAO.SaveNew(new PageView(UserInfo, pageName.ToUpper()), AppSettings.AllowPageReportRecording, UserInfo); UserInfo.LastDatePageRecordedUTC = DateTime.UtcNow; UserSessionInfo = UserInfo; } catch (Exception e) { CompanyCommons.Logging.WriteLog(String.Format("ChimeraWebsite.Helpers.SiteContextRecordPageView(pageName: {0})", pageName), e); } }