Eu já lutei com isso antes também.
Aqui está uma analogia para o que parece estar acontecendo ... Um novo visitante, Joe, chega ao site e faz login através da página de login usando o FormsAuthentication. O ASP.NET gera uma nova identidade para Joe e fornece a ele um cookie. Esse cookie é como a chave da casa e, desde que Joe retorne com essa chave, ele poderá abrir a fechadura. Cada visitante recebe uma nova chave e um novo bloqueio para usar.
Quando FormsAuthentication.SignOut()
é chamado, o sistema diz a Joe para perder a chave. Normalmente, isso funciona, já que Joe não tem mais a chave, ele não pode entrar.
No entanto, se Joe sempre volta, e faz ter essa chave perdida, ele é deixar de volta!
Pelo que sei, não há como dizer ao ASP.NET para alterar a fechadura da porta!
A maneira de viver com isso é lembrar o nome de Joe em uma variável Session. Quando ele sai, abandono a sessão para não ter mais o nome dele. Mais tarde, para verificar se ele tem permissão para entrar, simplesmente comparo o Identity.Name com o que a sessão atual possui e, se não corresponderem, ele não é um visitante válido.
Em resumo, para um site, NÃO confie User.Identity.IsAuthenticated
sem também verificar suas variáveis de sessão!