Explanations are good. Here are mine, reprinted for convenience:
Throwing an exception is a very expensive operation--basically
the most expensive thing short of calling external resources.
Think of an exception as making the computer beep twice and
pause for two seconds, then think if you actually want to use
one in that place. 2. Thou shalt not use exceptions to manage
program flow. The idea here is to facade things like the Session
object away. For example, add a property to your base page class
such as the below: 3. Thou shalt wrap calls to external
resources, such as configuration values or session variables in
strongly typed properties. This means that your application no
longer has to worry about the specifics of the username storage,
it just pulls the property. So when you decide that it is better
to store it in a cookie, all you need to do is change the
property. Moreover, when one is storing complex types, it
centralizes all the casting. protected string UserName We had a
nice little debate on this