Problema na sessão com o IIS7
link
Sessões do IIS7 sendo cruzadas / misturadas / copiadas link
O sintoma
Os usuários relataram ter visto dados que não pertenciam a eles quando fizeram login em suas contas. Registros mostraram que quase 10% de nossos usuários recebiam cópias de sessões de outros usuários. O objeto de sessão inteiro foi copiado, incluindo as variáveis de sessão e sessionID. Uma vez duplicadas, as sessões individuais poderiam ser modificadas sem afetar a outra (ou seja, abandonar uma não mataria a outra).
Para detectar ocorrências do problema, armazenei o Request.RemoteHost (o endereço IP do computador que faz a solicitação) em uma variável de sessão. No início de cada solicitação, verifiquei se o IP da sessão correspondia ao IP da solicitação atual.
O que não foi
É possível que o IP mude naturalmente, mais simplesmente se um usuário redefinir seu roteador / modem. Este não foi o caso porque estava acontecendo muito frequentemente. Além disso, ocorreram casos confirmados de dados de um usuário sendo cruzados com outro. Por fim, alguns dos pares de IPs não estavam em computadores diferentes, mas em países diferentes.
Também é possível, e muitas vezes foi sugerido, que a sessão Variáveis podem deixar de ser únicas se forem usadas com variáveis estáticas / compartilhadas dentro do WebApp. Este não foi o caso, porque o endereço IP que eu armazenei na sessão foi escrito apenas uma vez, a partir da requisição e depois foi lido apenas para comparar com a requisição. Isso também foi descartado porque o SessionID também foi duplicado e esse é um valor somente leitura.
O que é
É um recurso / bug no IIS7. Esta versão mais recente do IIS introduziu alguns novos recursos de cache.
> O IIS7 armazena automaticamente o conteúdo estático, como páginas HTML, imagens e folhas de estilo.
O IIS7 agora tem a capacidade de armazenar em cache o conteúdo dinâmico também.
O armazenamento em cache de conteúdo dinâmico é ótimo se for uma página como uma galeria de imagens gerada dinamicamente ou uma página gerada dinamicamente com base na cultura do navegador. No entanto, neste tópico, link , Anil Ruia, engenheira sênior de design de software do IIS Core, explica < em> “Você não deve estar habilitando o cache de saída para qualquer resposta que dependa do estado da sessão.”
Se a página que gera o conteúdo depender do estado da sessão, ele armazenará em cache o objeto da sessão junto com o restante da página. O próximo usuário a chegar acaba puxando a sessão em cache, em vez de obter uma nova. Quando chequei as configurações, descobri que ele estava configurado para armazenar em cache todas as páginas .aspx por três minutos, incluindo muitas páginas que acessam a sessão.
A solução
Editar regra de cache
No IIS7, desative o cache para páginas .aspx em qualquer diretório com uma página asp.net que dependa do estado da sessão. Para fazer isso:
Run the Server Management console.
Navigate to Roles -> Web Server (IIS) -> Internet Information Services.
Select the site you wish to modify.
Select the folder that contains the .aspx pages you need to turn caching off for.
In the Feature View, double-click “Output Caching”.
If there is a rule there already for the .aspx extension double click it. Otherwise right click and select “Add…”
Enter .aspx for the “File name extension”
Check “User-mode caching”
Select “Prevent all caching”
Check “Kernel-mode caching”
Select “Prevent all caching”
Click OK
Close the Server management Console