He luchado con esto antes también.
Aquí hay una analogía de lo que parece estar sucediendo ... Un nuevo visitante, Joe, ingresa al sitio e inicia sesión a través de la página de inicio de sesión utilizando FormsAuthentication. ASP.NET genera una nueva identidad para Joe y le da una cookie. Esa galleta es como la llave de la casa, y mientras Joe regrese con esa llave, puede abrir la cerradura. Cada visitante recibe una nueva clave y una nueva cerradura para usar.
Cuando FormsAuthentication.SignOut()
se llama, el sistema le dice a Joe que pierda la llave. Normalmente, esto funciona, ya que Joe ya no tiene la llave, no puede entrar.
Sin embargo, si alguna vez vuelve a Joe, y lo hace tener esa llave perdida, que es dejar atrás en!
Por lo que puedo decir, ¡no hay forma de decirle a ASP.NET que cambie la cerradura de la puerta!
La forma en que puedo vivir con esto es recordar el nombre de Joe en una variable de sesión. Cuando cierra la sesión, abandono la sesión para no tener su nombre nunca más. Más tarde, para verificar si está permitido, simplemente comparo su Identity.Name con lo que tiene la sesión actual, y si no coinciden, no es un visitante válido.
En resumen, para un sitio web, ¡NO confíe User.Identity.IsAuthenticated
sin verificar también sus variables de sesión!