Http is stateless by definition.
Even if classic asp.net claims to be statefull, it is simulating state by storing some state information and sending it from client to server and back. Actually the IIS + ASP.NET processing pipeline is more complicated to declare it statefull or stateless, since there are application objects that persist between several calls. But this is highly configurable and depends on many things.
Session is of course there in MVC also, and that's the primary storage of volatile data to be passed between calls, that we don't want to persist.
Believe me, the MVC approach is the canonical one, the ASP.NET classic approach was an interesting but very unique approach.
If you want to get an insight in ASP.NET pipeline check this article: http://www.west-wind.com/presentations/howaspnetworks/howaspnetworks.asp