2009-02-23 50 views
5

Tôi có một ứng dụng ASP.NET sử dụng Xác thực Mẫu. Khi người dùng nhấp vào nút Đăng xuất trên trang, nó sẽ chạy đoạn mã sau.Mũi tên quay lại sau khi đăng xuất

 FormsAuthentication.SignOut(); 
     Response.Expires = 0; 
     Response.Cache.SetNoStore(); 
     Response.AppendHeader("Pragma", "no-cache"); 

Tuy nhiên, người dùng vẫn có thể nhấn mũi tên quay lại và xem trang trước mà không cần phải đăng nhập lại. Tôi chắc chắn nó có một cái gì đó để làm với trang trước đó được lưu trữ. Làm thế nào tôi có thể chắc chắn rằng họ được nhắc nhở để đăng nhập lại với trở lại?

+0

Một cách để làm là viết mã No-Cache trong tất cả các trang, nhưng tôi cũng đang tìm cách tốt hơn để hết hạn nội dung. +1 – Ramesh

Trả lời

5
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
+0

Đẹp nhất. Khi tôi đặt điều này trong Page_Load của trang chính nó hoạt động. :-) – Craig

1

Và bây giờ bạn biết tại sao bạn nhận được thông báo "Bạn đã đăng xuất. Vui lòng đóng cửa sổ trình duyệt này vì lý do bảo mật".

Không có bộ nhớ cache nào là giải pháp thay thế.

Giải pháp thay thế áp chót là sử dụng ajax để kéo bất kỳ thông tin nhạy cảm nào xuống - điều này sẽ được chạy lại trong trường hợp ngược lại và thông tin sẽ không được lưu trong bộ nhớ cache. Đó là kết nối nhiều hơn và độ trễ nhiều hơn, nhưng do bộ nhớ đệm trình duyệt hiện đại không có nhiều mà có thể được thực hiện ngoại trừ cách giải quyết như thế này.

-Adam

+0

Tôi không nhận được thông báo "Bạn đã đăng xuất. Vui lòng đóng cửa sổ trình duyệt này vì lý do bảo mật". – Craig

+0

Sau đó, bạn chưa lập trình nó. Trong nhiều ứng dụng phần mềm cần bảo mật, chẳng hạn như paypal, hoặc truy cập web, bạn sẽ nhận được thông báo tương tự. Bạn có thể xem những gì họ đang làm để ngăn nút quay lại hoạt động. Nó chỉ là HTTP. –

0

Trong khi bộ nhớ đệm không đảm bảo, điều này làm việc cho tôi cho hầu hết các phần

//Used for disabling page caching 
    HttpContext.Current.Response.Cache.SetExpires(
     DateTime.UtcNow.AddDays(-1)); 
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false); 
    HttpContext.Current.Response.Cache.SetRevalidation(
     HttpCacheRevalidation.AllCaches); 
    HttpContext.Current.Response.Cache.SetCacheability(
     HttpCacheability.NoCache); 
    HttpContext.Current.Response.Cache.SetNoStore(); 

Run này trong phương pháp OnInit() bất kỳ của trang (có thể bằng cách sử dụng một lớp cơ sở) trên bất kỳ trang nào bạn không muốn người dùng có thể lưu vào bộ nhớ cache.

Hãy cẩn thận mặc dù, một số trang có thể yêu cầu bạn phải cho phép bộ nhớ đệm như làm tải tập tin trên các trang SSL, vv

tôi tìm thấy mã này ở đâu đó, nếu tôi tìm liên kết tôi sẽ cập nhật các bài.

Các vấn đề liên quan