Catching Session start in HTTPModules

  • Thread starter Thread starter DamienS
  • Start date Start date
D

DamienS

Hi,

I'm trying to get away from using global.asax for reasons of
'neatness'.

Am I able to register a HTTPModule that captures the starting of a
user session? Isn't Session_Start an event in global.asax? ... and
isn't global.asax exposing events of HttpApplication?

What am I missing?

Thanks in advance,


Damien



public class clsSessionManager : IHttpModule
{
#region IHttpModule Members

void IHttpModule.Dispose()
{
}

void IHttpModule.Init(HttpApplication context)
{
// I would have thought that I could use
context.SessionStart+= here....
}

#endregion
}
 
I put all kinds of code , static methods and fields in Global.asax and it is
very neat (at least to me).
You can use Session in an HttpModule by implementing the marker interface
IRequiresSessionState.
Peter
 
Thanks very much Peter.

I'm having trouble finding the session_start event though. It appears
in global.asax, however I can't find any other reference to it in the
framework. I've read up on IRequiresSessionState and understand that I
can use it to see if the current context requires a session, however
what I'm trying to do is capture when a session begins. Is there any
way to do this outside of global.asax?

After digging around some more, I'm now really curious - 'where' is
the session_start event in global.asax defined? Why doesn't it appear
in the object model? I notice that there's a AcquireRequestState event
on HttpApplication described as "Occurs when ASP.NET acquires the
current state (for example, session state) that is associated with the
current request." - however, to me, this description doesn't say that
it fires when a new session is created.

Thanks in advance,


Damien
 
Thanks very much Peter.

I'm having trouble finding the session_start event though. It appears
in global.asax, however I can't find any other reference to it in the
framework. I've read up on IRequiresSessionState and understand that I
can use it to see if the current context requires a session, however
what I'm trying to do is capture when a session begins. Is there any
way to do this outside of global.asax?

After digging around some more, I'm now really curious - 'where' is
the session_start event in global.asax defined? Why doesn't it appear
in the object model? I notice that there's a AcquireRequestState event
on HttpApplication described as "Occurs when ASP.NET acquires the
current state (for example, session state) that is associated with the
current request." - however, to me, this description doesn't say that
it fires when a new session is created.

Thanks in advance,

Damien

Damien,
The Session is implemented via a HttpModule itself. It is registered
by default in the root web.config. It is of the type
System.Web.SessionState.SessionStateModule. That class is what exposes
the session start event. In order to bind an event handler you will
have to obtain the instance of the SessionStateModule. The
HttpApplication exposes the modules as a collection. So your code
would look something like below. (I am a VB developer so excuse syntax
etc. ) Hopefully this helps.

void IHttpModule.Init(HttpApplication context)
{
SessionStateModule sessionModule = context.modules("Session");
sessionModule.Start += here ...
}
 
Damien,
The Session is implemented via a HttpModule itself. It is registered
by default in the root web.config. It is of the type
System.Web.SessionState.SessionStateModule. That class is what exposes
the session start event. In order to bind an event handler you will
have to obtain the instance of the SessionStateModule. The
HttpApplication exposes the modules as a collection. So your code
would look something like below. (I am a VB developer so excuse syntax
etc. ) Hopefully this helps.

void IHttpModule.Init(HttpApplication context)
{
    SessionStateModule sessionModule = context.modules("Session");
    sessionModule.Start += here ...

}

Clarification: "Session" is the name given to the SessionStateModule
when it is registered in the root web.config.
 
Back
Top