8 Stimmen

OutputCache-Dilemma mit Authentifizierung in ASP.NET MVC

Ich schreibe eine ASP.NET MVC-Website, die die Möglichkeit für Benutzer, Konten zu erstellen und sich anmelden enthält. Da ich auch wollen, um die Website aggressiv Cache, Ich habe Probleme bei der Kombination von Caching und Authentifizierung.

Auf jeder Seite gebe ich oben, wenn der Benutzer eingeloggt ist, seinen Benutzernamen, einen Link zu seinem Profil und einen Link zum Abmelden aus. Wenn er nicht angemeldet ist, gebe ich einen Standard-Login-Link aus. Außerdem werden auf der Seite selbst einige Inhalte für nicht authentifizierte Benutzer nicht angezeigt, während andere Inhalte davon abhängen, welcher Benutzer angemeldet ist.

Ich habe vor einiger Zeit versucht, dieses Problem 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 schrieb ich ein Attribut, das von OutputCacheAttribute abgeleitet ist, aber hebt die Zwischenspeicherung auf, wenn der Benutzer eingeloggt ist .

Derzeit verwende ich dieses Attribut, aber ich erhalte falsche Ergebnisse in einigen Fällen. Zum Beispiel kann der Benutzer eine Seite besuchen, sich dann anmelden und dann die Seite erneut besuchen, nur um den Anmeldelink oben zu sehen und nicht seinen Benutzernamen.

Hier sind einige Lösungen, die ich in Betracht ziehe:

  • Einstellung der HttpCacheability ou Cache-Control Typ zu private statt public . Auf diese Weise wird die Antwort nur auf der Client-Seite zwischengespeichert. Wird dadurch das Problem behoben? Wenn ja, hat dies Auswirkungen auf die Effizienz des Caching? Ich habe festgestellt, dass Stack Overflow anscheinend public Allerdings.
  • Einrichten eines VaryByCustom-Parameters, um für jeden Benutzer einen anderen Cache einzurichten como in diesem Lernprogramm . Kann dies helfen und gleichzeitig die Effizienz und Effektivität des Caching aufrechterhalten?

Vielen Dank im Voraus!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X