You are using "
InProc" mode of Asp.Net Session Management.
This mode of session state management is as same as Classic Asp State Management, where session state gets maintained in the running process on the same Web Server/Machine. Whenever this process gets recycled by IIS, your web application looses it's session state information/data.
Have a look at below link, for more information on this.
http://blogs.iis.net/webtopics/archive/2009/07/21/in-proc-session-state-management.aspx
For more information on "ASP.NET Session State" refer this.
http://msdn.microsoft.com/en-us/library/ms972429.aspx
Below CodeProject article has a work-around for this problem.
Prevent Session Timeout in ASP.NET