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ặcCache-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ụngpublic
, 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!