I'm going to suggest you try SQL server based session(), or even easier is to turn on the state server, and try that. Session() can become VERY flakey if some code triggers an error, and that will OFTEN result in session() going out of scope. In other words, this probably is not a session() timeout, but some code and library triggering a code error. When that occurs then session() will often be lost.
So, you can spend a lot of time trying to track down "some" error in "some" place that is un-handled, and thus in most cases it simply better to make session() more robust.
Give "state server" sessions a try, see if that helps.