捕获global.asax(C#,。Net)之外的会话状态事件?

时间:2017-02-14 17:47:47

标签: c# .net session events state

我需要使用Session_Start()和Session_End()来捕获会话状态事件。我的项目的性质限制了更改源代码,因此我无法将这些方法添加到global.asax文件中。我该怎么做?我已经尝试继承global.asax.cs类并在那里添加了方法,但它们没有命中。

1 个答案:

答案 0 :(得分:0)

您可以使用HTTP Module执行此操作。这是一个例子:

public class SessionCatchingModule : IHttpModule //You will need to import System.Web
{
    public void Init(HttpApplication context)
    {
        //Get the SessionstateModule and attach our own events to it
        var module = context.Modules["Session"] as SessionStateModule;
        if (module != null)
        {
            module.Start += this.Session_Start;
            module.End += this.Session_end;
        }
    }

    private void Session_Start(object sender, EventArgs args)
    {
        //Oh look, a session has started
    }

    private void Session_End(object sender, EventArgs args)
    {
        //Oh look, a session has ended
    }

}

现在在web.config中确保正在加载模块:

<system.webServer>
  <modules>
    <add name="SessionCatchingModule" 
         type="YourNamespace.Goes.Here., SessionCatchingModule" />
  </modules>
</system.webServer>