2017-02-14 27 views
2

Мне нужно поймать события состояния сеанса, используя Session_Start() и Session_End(). Природа моего проекта ограничивает изменение исходного кода, поэтому я не могу добавить эти методы в файл global.asax. Как мне это сделать? Я уже пробовал наследовать класс global.asax.cs и добавил туда методы, но они не попали.Захват событий сессии за пределами global.asax (C#, .Net)?

ответ

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>