Ich schreibe eine ASP.NET MVC-Site, die Benutzern die Möglichkeit bietet, Accounts zu erstellen und sich anzumelden. Da ich die Site auch aggressiv zwischenspeichern möchte, stößt ich auf einige Probleme beim Mischen von Caching mit Authentifizierung .
Auf jeder Seite, oben, wenn der Benutzer angemeldet ist, gebe ich seinen Benutzernamen, einen Link zu seinem Profil und einen Link zum Abmelden aus. Wenn sie nicht eingeloggt sind, gebe ich einen Standard-Login-Link aus. Auf der Seite selbst werden einige Inhalte nicht authentifizierten Benutzern angezeigt, während andere Inhalte davon abhängen, welcher Benutzer angemeldet ist.
Ich habe zuerst versucht, dieses Problem vor einiger Zeit zu lösen, indem ich das Stack Overflow-Team gefragt habe, wie sie das Problem gelöst haben. Jeff antwortete, dass sie im Grunde überhaupt kein Caching für nicht authentifizierte Benutzer durchführen. Also habe ich ein Attribut geschrieben, das von OutputCacheAttribute abgeleitet ist, aber das Caching abbricht, wenn der Benutzer angemeldet ist .
Momentan verwende ich dieses Attribut, aber in einigen Fällen erhalte ich falsche Ergebnisse . Zum Beispiel kann der Benutzer eine Seite besuchen, sich dann anmelden und dann die Seite erneut besuchen, nur um oben den Login-Link und nicht seinen Benutzernamen zu sehen.
Hier sind einige Lösungen, die ich in Betracht ziehe:
HttpCacheability
oder Cache-Control
auf private
anstatt public
. Auf diese Weise wird die Antwort nur clientseitig zwischengespeichert. Wird dies das Problem beheben? Wenn dies der Fall ist, wird sich dies auf die Effizienz des Caching auswirken? Ich habe bemerkt, dass Stack Overflow public
zu verwenden scheint. Vielen Dank im Voraus!
Abhängig von der Struktur Ihrer Anwendung kann es sinnvoll sein, Daten statt Ansichten zu cachen.
Da Ansichten sehr einfach sind und der Datenbankzugriff normalerweise die meiste Zeit benötigt, um eine Seite zu rendern, können Sie den größten Nutzen aus dem Zwischenspeichern der Ausgabe ziehen, indem Sie das Modell in Ihrem Controller zwischenspeichern und alle nicht abteilbaren Teile der Ansicht nicht betroffen, sodass Sie öffentliche Inhalte, die von authentifizierten Benutzern angezeigt werden, zwischenspeichern können.
Es gibt auch Möglichkeiten, das Ausgabe-Caching mit Teilansichten zu arbeiten, aber meiner Meinung nach fügen sie mehr Komplexität hinzu, als es wirklich gerechtfertigt ist.
Tags und Links asp.net-mvc c# asp.net caching outputcache