Session is one of the most important state managements in ASP.NET. We can enable or disable session state either in web.config or using @Page
directive’s EnableSessionState
attributes. But there was no provision to change the session state at runtime till date in ASP.NET. But using ASP.NET 4.0, we can change the session state programmatically. The .NET 4.0 Framework adds a new method SetSessionStateBehavior
to the HttpContext
class for ASP.NET. This method required SessionStatebehavior
value to set the current session mode. To call SetSessionStateBehavior
, simply create a new HttpModule
by implementing IHttModule
and hook the BeginRequest
event. Most importantly, you can only use the SetSessionStateBehavior
until the AcquireRequestState
event is fired, because AcquireRequestState occurs when ASP.NET acquires the current state that is associated with the current request.
While calling SetSessionStatebehavior
, you can pass the following values as SessionStatebehavior
:
Default
: This is the default setting which means everything works as before Disabled
: Turned of Session State for Current Request ReadOnly
: Read only access to Session State Required
: Enabled session state for both Read and Write Access
Let’s have a look into a quick example where I will show how you can change the session state based on the different member types of your web site. Let’s say you have 3 different types of members (Gold
, Silver
and Platinum
) and for Platinum member
you want to maintain the session for some specific pages not for other. To start with this first, create an new HTTP Module by implementing IHttpModule Interface
.
using System;
using System.Web;
public class SessionModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpContext currentContext = (sender as HttpApplication).Context;
if (!string.IsNullOrEmpty(currentContext.Request.QueryString["memberType"]))
{
if (currentContext.Request.QueryString["memberType"].ToString().Equals
("Platinum"))
{
currentContext.SetSessionStateBehavior
(System.Web.SessionState.SessionStateBehavior.Required);
}
}
}
}
From the above code block, you can see, based on the member type which is nothing but a query string
, I am changing the session state.
Now, if you have Session disabled in @Page
Directive, it will automatically override the settings.
Once you are done with implementation of HTTP Module, you have to configure web.config for the same.
Again, you have to make sure that you can only use SetSessionStateBehavior
until the AcquireRequestState
event is fired.
And, not only with Query string, you can enable or disable session state based on the different page as shown below:
To know more about ASP.NET 4.0 State management, you can read my Session notes on Microsoft Community Tech Days – Hyderabad
You will get the complete demo application on runtime session state change from the download at the top of this article.
Hope this will help you!
Cheers !
AJ
Filed under: ASP.NET 4.0, General, Visual Studio 2010