Tôi đang sử dụng asp.net MVC, vì vậy tôi đã làm điều này trong điều khiển của tôi
if (User.Identity.IsAuthenticated) {
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
Response.Cache.SetNoStore();
Response.Cache.SetNoServerCaching();
}
else {
Response.Cache.VaryByParams["id"] = true; // this is a details page
Response.Cache.SetVaryByCustom("username"); // see global.asax.cs GetVaryByCustomString()
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
}
Lý do tôi đã làm nó theo cách này (thay vì khai báo) là tôi cũng cần khả năng bật tính năng này và tắt thông qua cấu hình (không hiển thị ở đây, nhưng có một kiểm tra thêm trong nếu cho biến cấu hình của tôi).
Bạn vẫn cần thay đổi theo tên người dùng, nếu không bạn sẽ không thực thi mã này khi người dùng đăng nhập xuất hiện. Hàm GetVaryByCustomString của tôi trả về "ẩn danh" khi không được xác thực hoặc tên người dùng khi có sẵn.
Bạn đã bao giờ nhận được giải pháp cho vấn đề này chưa? Chúng tôi có một nhu cầu tương tự mà thay đổiByCustom không phải là câu trả lời cho. –
Hiện tại tôi đang sử dụng giải pháp mã-đằng sau, nơi tôi có thể dễ dàng quyết định xem tôi có muốn cache trang hay không. Nếu người dùng không đăng nhập, tôi nhớ cache. Nếu người dùng đăng nhập, bộ nhớ cache bị vô hiệu hóa cho toàn bộ trang (và chỉ lưu vào bộ nhớ cache "tĩnh"). Sau khi tôi nhận được câu trả lời dưới đây, tôi đã tìm kiếm một giải pháp không có mã sau nhưng không tìm thấy gì hữu ích. Sau khi tất cả, một giải pháp code-behind cũng rất rõ ràng và không có nhược điểm lớn hơn một ASP.NET thuần túy. –
Bạn có thể chia sẻ giải pháp codebehind của mình không? Bạn kiểm soát bộ nhớ cache như thế nào? –