Why is session NULL in BeginRequest()? (httpRequestBegin)

Have you ever wondered why the session is NULL when a request begins?
The answer is simple: The Application_BeginRequest() event is fired before the Session_Start() event.
The BeginRequest() event is fired for each request as the first event. The Session_Start() event is only fired once per session, after the BeginRequest() event.

The following is specific for Sitecore:

This means that if you add a new processor in the httpRequestBegin pipeline, you will get an exception if you call HttpContext.Current.Session:

namespace MyNameSpace
  class MyFunction : HttpRequestProcessor
    public override void Process(HttpRequestArgs args)
	  var somevar = HttpContext.Current.Session;

Simply because the session is not available at the time.

So what do you do then?

Sitecore have added another pipeline, httpRequestProcessed, which is fired AFTER httpRequestBegin AND Session_Start():

  <processor type="MyNamespace.MyFunction, MyDLL" />

This pipeline is usually used for replacing content or setting http status codes after the contents of a website have been processed, but you can use it for any purpose you require.

And please note that the pipeline is called for every request that have ended, so you need the same amount of carefulness as when calling httpRequestBegin. Remember to filter out doublets, Sitecore calls, check for Sitecore context etc., before calling your code.

// This is a classic (maybe a little over-the-top) 
// test to see if the request is a request
// that needs processing
namespace MyNamespace
  public class MyClass : HttpRequestProcessor
    public override void Process(HttpRequestArgs args)
      Assert.ArgumentNotNull(args, "args");
      if (Context.Site == null)
      if (Context.Site.Domain != DomainManager.GetDomain("extranet"))
      if (args.Url.FilePathWithQueryString.ToUpperInvariant().Contains("redirected=true".ToUpperInvariant()))
        return; // already redirected
      if (Context.PageMode.IsPageEditor)  

      // DO CODE



About briancaos

Developer at Pentia A/S since 2003. Have developed Web Applications using Sitecore Since Sitecore 4.1.
This entry was posted in General .NET, Sitecore 6, Sitecore 7, Sitecore 8 and tagged , , , , , , . Bookmark the permalink.

One Response to Why is session NULL in BeginRequest()? (httpRequestBegin)

  1. Pingback: Let's do Sitecore

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s