Catching Session start in HTTPModules

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
}
 
P

Peter Bromberg [C# MVP]

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
 
D

DamienS

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
 
N

Norm

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 ...
}
 
N

Norm

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,710
Latest member
bernietqt

Latest Threads

Top