If anything distinguishes Web-based programming from other types of programming, it's probably the issue of tracking the state of any particular user. Because Web development inherently involves distributing state and managing that state, it needs to be done deliberately.
Session state is one of the most important pieces of state in any application because it is associated with the particular client making the request. This is most important for applications where you want to have the state associated with a single user available (as in the case of a shopping cart).
Session state is always available through the Page (and through the HttpContext) via the Session object. It's a name value dictionary that holds any kind of CLR object. Adding and retrieving information is accomplished most easily via indexers. In addition, session state may be configured in its location, in how it's tracked, and in how long it lasts. ASP.NET supports a number of other more advanced settings, too.
In this chapter, we also looked at the Wizard control as a way to retain information between several posts without resorting to session state. This is most useful when several kinds of related data need to be collected at once.