2011-01-16 19 views
8

Tôi đang viết một trang ASP.NET MVC bao gồm khả năng để người dùng tạo tài khoản và đăng nhập. Vì tôi cũng muốn cache trang web tích cực, Tôi đang chạy vào một số rắc rối khi trộn bộ nhớ đệm với xác thực.Tình trạng khó xử của OutputCache với xác thực trong ASP.NET MVC

Trên mọi trang, ở trên cùng, nếu người dùng đăng nhập, tôi xuất tên người dùng của họ, liên kết tới tiểu sử của họ và liên kết để đăng xuất. Nếu họ không đăng nhập, tôi sẽ xuất một liên kết đăng nhập chuẩn. Ngoài ra, trong chính trang đó, một số nội dung không được hiển thị cho người dùng chưa được xác thực, trong khi nội dung khác phụ thuộc vào người dùng nào đã đăng nhập.

Lần đầu tiên tôi cố giải quyết vấn đề này bằng cách hỏi nhóm Stack Overflow cách họ giải quyết vấn đề. Jeff trả lời rằng về cơ bản họ không có bộ nhớ đệm nào cả cho người dùng chưa được xác thực. Vì vậy, tôi đã viết một thuộc tính có nguồn gốc từ OutputCacheAttribute nhưng hủy bộ đệm ẩn nếu người dùng đăng nhập.

Hiện tại, tôi đang sử dụng thuộc tính đó, nhưng tôi nhận được kết quả không chính xác trong một số trường hợp. Ví dụ: người dùng có thể truy cập một số trang, sau đó đăng nhập, sau đó truy cập lại trang, chỉ để xem liên kết đăng nhập ở trên cùng, thay vì tên người dùng của họ.

Dưới đây là một số giải pháp mà tôi đang xem xét:

  • Thiết lập HttpCacheability hoặc Cache-Control loại để private, chứ không phải là public. Bằng cách này, phản hồi chỉ được lưu trữ ở phía máy khách. Điều này có khắc phục được sự cố không? Nếu có, điều này có ảnh hưởng đến hiệu quả của bộ nhớ đệm không? Tôi đã nhận thấy rằng Stack Overflow dường như sử dụng public, tuy nhiên.
  • Thiết lập thông số VaryByCustom thành bộ nhớ cache khác nhau cho mỗi người dùng, như in this tutorial. Điều này sẽ giúp, trong khi vẫn duy trì hiệu quả và hiệu quả của bộ nhớ đệm?

Xin cảm ơn trước!

Trả lời

9

Tùy thuộc vào cấu trúc của ứng dụng của bạn, điều này có thể có ý nghĩa với dữ liệu bộ nhớ cache thay vì chế độ xem.

Vì lượt xem rất đơn giản và truy cập cơ sở dữ liệu thường mất nhiều thời gian nhất định để hiển thị trang, bạn có thể tận dụng tối đa bộ nhớ đệm đầu ra bằng cách lưu bộ nhớ trong mô hình của bạn và bất kỳ phần nào không thể xem được không bị ảnh hưởng để bạn có thể lưu trữ nội dung công cộng được người dùng đã xác thực xem.

Ngoài ra còn có các cách để làm cho bộ nhớ đệm đầu ra hoạt động với một phần lượt xem, nhưng theo ý kiến ​​của tôi, chúng thêm phức tạp hơn là thực sự hợp lý.

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