Click here to Skip to main content
15,881,172 members
Articles / Web Development / ASP.NET

Session

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
11 Oct 2013CPOL4 min read 11.4K   2  
ASP.NET Session state provides a place to store values that will persist across page requests.  Values stored in Session are stored on the server

This articles was originally at wiki.asp.net but has now been given a new home on CodeProject. Editing rights for this article has been set at Bronze or above, so please go in and edit and update this article to keep it fresh and relevant.

ASP.NET Session state provides a place to store values that will persist across page requests. Values stored in Session are stored on the server and will remain in memory until they are explicitly removed or until the Session expires.

State management using session is one of the best ASP.NET features, because it is secure, transparent from users, and we can store any kind of object in it. Along with these advantages, sometimes session can cause performance issues in high traffic sites because it is stored in server memory and clients read data from the server.

Storing and retrieving a value in the Session is as simple as:

VB:

VB.NET
'Storing Name in Session
Session("Name") = "John Doe"  'Or Session.Add("Name","John Doe")
'retrieving string
Dim Name As String = Session("Name")

C#:

C#
//Storing Name in Session
Session["Name"] = "John Doe" // Or Session.Add("Name","John Doe");  
//retrieving string
Name = (string)Session["Name"]; 

By default, the Session will be created within the same process that your web site runs in (InProc). This is controlled by a setting in the web.config file:

C#
<sessionState mode="InProc" />

Although running the Session In Process is very convenient, it does mean that all Session values will be lost whenever the application recycles (such as when deploying updates). There are alternate modes you can use that will allow the Session state to survive even when the application recycles. The available options are:

  • Off - No session state will be stored
  • InProc - (The Default) Session state exists within the process the web is using
  • StateServer - Session data is sent to the configured stateserver service
  • SQLServer - Session data is store in the configured SQL Server database

Both the StateServer mode and the SQLServer mode allow Session state to survive an application recycle. But, when storing reference type objects (such as class instances), they can only be stored to StateServer or SQLServer if they have been marked with the Serializable attribute.

There are certain events in Global.asax file associated with Session, Session_Start and Session_End.

The Session_End event only fires in InProc, it does not support session management implemented with OutProc.

An important consideration for using Session state is that the Session does expire. By default, if a user does not access their Session data within 20 minutes (by default), the Session will expire and all items that had been stored in the Session will be discarded. Because of this, it is important to check the object that is returned from the Session to see if it exists or if it is null before you try to work with it. For example:

C#
object sessionObject = Session["someObject"];
if (sessionObject != null) {
 myLabel.Text = sessionObject.ToString();
}

The Session Timeout is adjustable through a web.config setting but increasing the timeout value can put memory pressure on your server that may be undesirable.

C#
<sessionState timeout="number of minutes" />

Other commonly used Session methods are:

  • Session.Abandon() - removes the Session and all items that it contains
  • Session.Clear() - removes all items from the Session
  • Session.RemoveAll() - removes all items from the Session
  • Session.Remove("itemName") - removes the item that was stored under the name "itemName"

How To

Whitepapers/Blogs

Enjoy!

This article was originally posted at http://wiki.asp.net/page.aspx/57/session

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
The ASP.NET Wiki was started by Scott Hanselman in February of 2008. The idea is that folks spend a lot of time trolling the blogs, googlinglive-searching for answers to common "How To" questions. There's piles of fantastic community-created and MSFT-created content out there, but if it's not found by a search engine and the right combination of keywords, it's often lost.

The ASP.NET Wiki articles moved to CodeProject in October 2013 and will live on, loved, protected and updated by the community.
This is a Collaborative Group

755 members

Comments and Discussions

 
-- There are no messages in this forum --