Actually, the ticket may in fact be expiring. Have you actually tracked one to see if it is being renewed correctly? Here’s a link to an example of how to get at the ticket, test for sliding expirations, and renewing it.
Check the eventlog to see if your app recycles for some reason. If there’s a serious resource leak IIS may recycle the app pool to release memory. IIRC it is by default set to recycle if IIS uses more than 60% of RAM.
The machinekey is used to encrypt/decrypt the authentication tickets. When no machinekey is specified, ASP.NET will generate one. But when the application recycles, ASP.NET will generate a new one, resulting in the behavior your telling. Because the existing tickets are encrypted using the previous key, with the new key they cannot be decrypted anymore so ASP.NET will force you to login again. Specifying a machine key will solve this
There are two things you can do in order to resolve this issue. Well only If( you have your form authentication and other properties are set correctly).
Create a Machine Key in your web.config.
Change the App Pool Process Idle time to higher limit. By default its 20 minutes.
When the process stays idle for more than 20 minutes, it kills the worker process and as well as regenerate the machine key. While the existing cookie on client machine is encrypted with older machine key. As it wont be decrypt using the new machine, the user will be send to login page to re-enter the credentials and so does to create new persistent cookie.