Uma das grandes dúvidas que vemos por aí é a questão da expiração da Session antes de chegar ao valor de Timeout, definido no elemento sessionState do arquivo de configuração Web.Config.
A questão é que quando essa aplicação corre dentro do IIS 6.0, o Application Pool relacionado ao WebSite/Diretório Virtual pode estar reciclando o worker-process antes de exceder o timeout da Session. Como na maioria das aplicações Web, o conteúdo é sempre armazenado InProc (na memória do servidor onde a aplicação corre), ao reciclar o processo, todas as variáveis de sessão e também o Cache são perdidos.
Caso voce precise manter esse conteúdo em memória por mais tempo (independente da reciclagem), é necessário que voce configure a reciclagem do worker-process diretamente no IIS para um valor mais adequado. Quando a reciclagem é algo inevitável, é necessário recorrer ao armezenamento das variáveis de sessão fora do servidor onde a aplicação está sendo executada, para que ela possa “viver”. Pode, por exemplo, utilizar o SQL Server como um servidor de estado.