Keith Barrows
Keith Barrows

Reputation: 25308

How to use ASP.NET Session State in an HttpHandler?

I have an HttpHandler that is run on a client page (cross domain, not on our IIS server, etc) and when they click on our embedded link it fires off the Handler on our server. So far everything is working normally.

I am now trying to use the System.Web.HttpContext.Session object but it is null. I am thinking it is null because we don't have a session until our HttpHandler is invoked? And multiple calls to the handler will create a new session per call? If this is the case did MS just disable the Session object when calling into a HttpHandler? Can anyone confirm this?

If this is the case, what do you do to maintain state between calls? Some sort of SQL based data object? A file?

TIA

Upvotes: 66

Views: 33285

Answers (4)

Mara Morton
Mara Morton

Reputation: 4460

Have your HttpHandler implement the IRequiresSessionState interface. It will enable session state use. IRequiresSessionState can be found in the System.Web.SessionState namespace.

Upvotes: 151

KMX
KMX

Reputation: 2681

using System; 
using System.Web;
using System.Web.SessionState;
public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
   public bool IsReusable { get { return true; } }

   public void ProcessRequest(HttpContext context)
   {
       context.Response.Write(context.Session["kmx"]);
   }
}

Upvotes: 11

Jhonny D. Cano -Leftware-
Jhonny D. Cano -Leftware-

Reputation: 18013

I think you have to implement the empty interface IReadOnlySessionState, so the context will be loaded.

edit to add:

According to Michael Morton's answer, you can also implement IRequiresSessionState, which will give you write access also to the Session object

Upvotes: 31

Joe Davis
Joe Davis

Reputation: 1039

try using the current context...

System.Web.HttpContext.Current.Session

Upvotes: -10

Related Questions