Tôi đã đấu tranh với điều này trước đây quá.
Đây là một sự tương tự cho những gì dường như đang diễn ra ... Một khách truy cập mới, Joe, đến trang web và đăng nhập thông qua trang đăng nhập bằng FormsAuthentication. ASP.NET tạo ra một danh tính mới cho Joe và cho anh ta một cái bánh quy. Cookie đó giống như chìa khóa nhà, và miễn là Joe trở lại với chìa khóa đó, anh ta có thể mở khóa. Mỗi khách truy cập được cung cấp một khóa mới và một khóa mới để sử dụng.
Khi FormsAuthentication.SignOut()
được gọi, hệ thống sẽ bảo Joe mất chìa khóa. Thông thường, điều này hoạt động, vì Joe không còn chìa khóa, anh ta không thể vào được.
Tuy nhiên, nếu Joe quay lại và không có chìa khóa bị mất, anh ta sẽ quay lại!
Từ những gì tôi có thể nói, không có cách nào để bảo ASP.NET thay đổi khóa trên cánh cửa!
Cách tôi có thể sống với điều này là nhớ tên của Joe trong biến Phiên. Khi anh ấy đăng xuất, tôi từ bỏ Phiên để tôi không còn tên anh ấy nữa. Sau này, để kiểm tra xem anh ấy có được phép vào hay không, tôi chỉ cần so sánh Danh tính của anh ấy. Hãy xem phiên hiện tại có gì và nếu chúng không khớp, anh ấy không phải là khách truy cập hợp lệ.
Nói tóm lại, đối với một trang web, KHÔNG dựa vào User.Identity.IsAuthenticated
mà không kiểm tra các biến Phiên của bạn!