簡體   English   中英

在session_End事件中寫入數據庫

[英]Writing to database on session_End event

我正在編寫一個HttpModule來根據用戶當前會話跟蹤其頁面瀏覽量。

我的模塊工作正常,除了用戶退出會話時。 示例方案:

  • 會話超時為20分鍾
  • 用戶瀏覽網站15分鍾
  • 用戶離開站點
  • 現在,該用戶離開站點后將不會觸發會話結束事件

我想加入Session End事件,以便我可以為用戶批量更新頁面視圖,而不是每次用戶訪問頁面時都這樣做(這並不是很好的性能)。

有沒有一種方法可以檢測何時發生這種情況,然后觸發一個事件/一段代碼來記錄視圖?

所需的示例代碼:

public void Init(HttpApplication application)
{
    application.PostRequestHandlerExecute += application_PostRequestHandlerExecute;
    SessionStateModule session = (SessionStateModule)application.Modules["Session"];
    session.Start += session_Start;
    session.End += session_End;
}

void session_End(object sender, EventArgs e)
{
    Visitor visitor = HttpContext.Current.Session["visitor"] as Visitor;

    if (visitor != null)
    {
        foreach (PageItem page in visitor.Pages)
        {
            page.UpdatePageViews();
        }
    }
}

我知道這可能與目前的解決方案不符,但也許您可以考慮使用另一種跟蹤使用情況的解決方案,例如Google Analytics(分析),因為他們已經在其平台上投入了大量精力。

您還可以將解決方案與Google Analytics(分析)集成,以根據需要將摘要信息提取回您的信息中。 這意味着您也不需要將所有跟蹤信息存儲在本地,而只需根據需要通過其API發出請求。

我發現該API難以集成,但現在可以在解決方案中使用。

如果您必須在本地進行跟蹤,為什么不異步進行此操作,以免您不占用UI線程-這樣對性能的影響應該最小化?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM