Piszę witrynę ASP.NET MVC, która zawiera możliwość tworzenia kont i logowania użytkowników. Ponieważ chcę również agresywnie buforować stronę, Używam w pewne kłopoty z mieszaniem pamięci podręcznej z uwierzytelnianiem.Dylemat OutputCache z uwierzytelnianiem w ASP.NET MVC
Na każdej stronie, na górze, jeśli użytkownik jest zalogowany, wysyłam jego nazwę użytkownika, link do jego profilu i link do wylogowania. Jeśli nie są zalogowani, generuję standardowy link logowania. Ponadto na samej stronie niektóre treści nie są wyświetlane nieuwierzytelnionym użytkownikom, podczas gdy inne treści zależą od tego, który użytkownik jest zalogowany.
Po raz pierwszy spróbowałem rozwiązać ten problem jakiś czas temu, prosząc zespół Stack Overflow, jak rozwiązali ten problem. problem. Jeff odpowiedział, że w zasadzie nie buforują w ogóle dla nieuwierzytelnionych użytkowników. Napisałem więc atrybut wywodzący się z OutputCacheAttribute, ale anuluje buforowanie, jeśli użytkownik jest zalogowany.
Obecnie używam tego atrybutu, ale w niektórych przypadkach otrzymuję niepoprawne wyniki: Nieprawidłowe wyniki:. Na przykład użytkownik może odwiedzić stronę, a następnie zalogować się, a następnie ponownie odwiedzić tę stronę, aby zobaczyć link do logowania u góry, a nie nazwę użytkownika.
Oto kilka rozwiązań, które Zastanawiam:
- Ustawianie typu
HttpCacheability
lubCache-Control
doprivate
zamiastpublic
. W ten sposób odpowiedź jest tylko buforowaną stroną klienta. Czy to rozwiąże problem? Jeśli tak, czy będzie to miało wpływ na wydajność buforowania? Zauważyłem, że Stack Overflow wydaje się jednak używaćpublic
. - Ustawienie parametru VaryByCache na cache inaczej dla każdego użytkownika, np. in this tutorial. Czy to pomoże, zachowując jednocześnie wydajność i skuteczność buforowania?
Z góry dziękuję!