Я тоже с этим раньше боролся.
Вот аналогия с тем, что, похоже, происходит ... Новый посетитель, Джо, заходит на сайт и входит через страницу входа с помощью FormsAuthentication. ASP.NET генерирует новую личность для Джо и дает ему cookie. Это печенье похоже на ключ от дома, и пока Джо возвращается с этим ключом, он может открыть замок. Каждому посетителю предоставляется новый ключ и новый замок для использования.
Когда вызывается FormsAuthentication.SignOut()
, система говорит Джо потерять ключ. Обычно это работает, поскольку у Джо больше нет ключа, он не может войти.
Однако, если Джо когда-нибудь вернется, и у есть тот потерянный ключ, его снова впускают!
Из того, что я могу сказать, нет способа заставить ASP.NET изменить замок на двери!
Я могу жить с этим, запоминая имя Джо в переменной Session. Когда он выходит из системы, я прекращаю сеанс, поэтому у меня больше нет его имени. Позже, чтобы проверить, разрешен ли ему вход, я просто сравниваю его Identity.Name с тем, что имеет текущий сеанс, и если они не совпадают, он не является действительным посетителем.
Короче говоря, для веб-сайта НЕ полагайтесь на User.Identity.IsAuthenticated
, не проверяя также переменные Session!