2013-05-02 26 views
20

Tôi biết đây là một câu hỏi phổ biến trong stackoverflow. Tôi đã trải qua mọi câu hỏi và tôi không thể tìm ra câu trả lời đúng cho tôi. Đây là bộ điều khiển đăng xuất của tôi Kết quả hành độngLàm thế nào để xóa bộ nhớ cache của trình duyệt trên nút quay lại trình duyệt nhấp vào trong MVC4?

[Authorize]  
    public ActionResult LogOut(User filterContext) 
    { 
     Session.Clear(); 
     Session.Abandon(); 
     Session.RemoveAll(); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
     Response.Cache.SetNoStore(); 
     FormsAuthentication.SignOut(); 
     return RedirectToAction("Home", true); 

    } 

Nó không hiệu quả đối với tôi. Tôi cũng đã cố gắng adding-

<meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Pragma" content="no-cache"/> <meta http-equiv="Expires" content="0"/>

không ai trong số những giải quyết vấn đề của tôi.

+1

Quay lại vị trí? Ở đâu? Hay chỉ là một hành động cụ thể? – mattytommo

Trả lời

46

Vấn đề với cách tiếp cận của bạn là bạn đang đặt nó ở nơi đã quá muộn để MVC áp dụng nó. Ba dòng mã sau đây của bạn nên được đặt trong phương thức hiển thị khung nhìn (do đó trang) mà bạn không muốn hiển thị.

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
Response.Cache.SetNoStore(); 

Nếu bạn muốn áp dụng hành vi "không có bộ nhớ cache trên trình duyệt" trên tất cả các trang thì bạn nên đặt nó trong global.asax.

protected void Application_BeginRequest() 
{ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
    Response.Cache.SetNoStore(); 
} 
+4

Tại sao điều này không được chấp nhận và tại sao nó không được upvoted nhiều hơn? Sau giờ làm việc của Googling, đây là giải pháp duy nhất hoạt động trên tất cả các trình duyệt. –

+3

thưa bạn, bạn là anh hùng của tôi cho ngày hôm nay. – Saturnix

+0

hoạt động rất đẹp. cảm ơn! – cocojiambo

13

Chỉ cần đặt bộ đệm đầu ra trên hành động. Tôi đã sử dụng phương pháp này trong nhiều dự án:

[HttpGet, OutputCache(NoStore = true, Duration = 1)] 
public ActionResult Welcome() 
{ 
    return View(); 
} 

Thuộc tính trên cơ bản sẽ chỉ thị cho trình duyệt để có được một bản sao mới của trang từ hành động điều khiển của bạn nếu người dùng điều hướng trở lại/về phía trước để nhìn của bạn.

Bạn cũng có thể xác định bộ nhớ đệm của mình trong web.config và sử dụng kết hợp với thuộc tính này để tránh lặp lại. Xem here

+0

Cảm ơn, điều này đã làm việc tuyệt vời. – Dave

+0

Điều này thực sự đã giúp tôi. Giải pháp này là tốt nhất cho trường hợp như vậy nếu bạn muốn cache các tập tin tĩnh/hình ảnh vv nhưng không muốn các trang cache (xem). – mmushtaq