繁体   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