Saya telah berjuang dengan ini sebelumnya juga.
Berikut ini analogi dengan apa yang tampaknya terjadi ... Pengunjung baru, Joe, datang ke situs tersebut dan masuk melalui halaman login menggunakan FormsAuthentication. ASP.NET menghasilkan identitas baru untuk Joe, dan memberinya cookie. Cookie itu seperti kunci rumah, dan selama Joe kembali dengan kunci itu, ia dapat membuka kunci. Setiap pengunjung diberikan kunci baru dan kunci baru untuk digunakan.
Kapan FormsAuthentication.SignOut()
dipanggil, sistem memberitahu Joe kehilangan kunci. Biasanya, ini berhasil, karena Joe tidak lagi memiliki kunci, dia tidak bisa masuk.
Namun, jika Joe pernah kembali, dan melakukannya memiliki kunci yang hilang itu, ia akan masuk kembali!
Dari apa yang saya tahu, tidak ada cara untuk memberitahu ASP.NET untuk mengubah kunci di pintu!
Cara saya dapat hidup dengan ini adalah mengingat nama Joe dalam variabel Sesi. Ketika dia logout, saya meninggalkan Sesi jadi saya tidak memiliki namanya lagi. Kemudian, untuk memeriksa apakah dia diizinkan masuk, saya hanya membandingkan Identitasnya. Nama dengan apa yang dimiliki sesi saat ini, dan jika mereka tidak cocok, dia bukan pengunjung yang valid.
Singkatnya, untuk situs web, JANGAN mengandalkan User.Identity.IsAuthenticated
tanpa juga memeriksa variabel Sesi Anda!