Well I don't know when "you'd expect" the Application_Start event to fire,
but I know I don't expect it to happen very often. Under normal release
conditions it should normally pretty much only fire after you reboot the
server and someone requests the first page.
The session will time out after 20 minutes of no page requests from the
user.
This default time interval is configurable in your web.config file.
After the session times out the Session_End event will be called in your
Global.asax file.
You can terminate the session manually by calling Session.Abandon, but be
aware this will cause the Session_End event to not be called. But that's
not so bad. Just take your code from the Session_End event, put it in a
separate function, then call that function from both your Session_End event
and whenever you call Session.Abandon. The Session_End event also won't
fire when you hit the stop button in the VS.NET IDE. It also won't fire at
all if you're not using standard in proc sessions.
Here's more details for you:
http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=7504