在session_End事件上写入数据库

时间:2014-04-09 10:22:02

标签: c# asp.net session session-timeout httpmodule

我正在编写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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我知道这可能与目前的解决方案不一致,但也许您可以查看另一种跟踪使用情况的解决方案,例如Google Analytics--因为他们已经在他们的平台上投入了大量精力。

您还可以将解决方案与Google Analytics集成,以根据需要将摘要信息反馈给您。这意味着您也不需要在本地存储所有跟踪信息,而只需根据需要通过其API发出请求。

我发现API难以集成,但现在让它在解决方案中工作。

如果你必须在本地进行跟踪,为什么不异步这样做,这样你就不会占用UI线程 - 那样性能影响应该是最小的?