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