I have a love/hate relationship with the ASP.NET Session. It’s such a convenient place to put things, but when you start putting applications into production there are a number of less-than-obvious edge cases that can come up and bite you.

Most often the Session is used when managing state over a long process like a multi-step wizard or questionnaire. However, when people use the Session, they often lean on it a little. They’ll bake it into their design so deep that when it doesn’t work, they’re screwed. That’s not to say they shouldn’t be able to lean on it, I’m just saying that there’s a lot of things going on with Session (not just on ASP.NET, but other frameworks as well) in order to get it to look seamless.

Scott Hanselman’s Computer ZenTroubleshooting Expired ASP.NET Session State and Your Options