Session will expire in 3 scenarios:
1. If the cookie, created at the client, is deleted
2. If you are maintaining cookieless sessions then a) your application is being restarted, OR b) IIS is being restarted.
Solution:
Point 1: See if any process at the client is interfering with the cookie. See to it that it's not getting deleted or modified.
Point 2: If you are using ASP.NET 2.0 then maintain your session data in ASPNET state server or SQL Server. Let me know if you need additional information.