Ich möchte meiner ASP.NET-Website Ausgabekache hinzufügen. Es gibt jedoch Code, der einige Schaltflächen und Inhalte ändert, je nachdem, ob der Benutzer angemeldet ist oder nicht. Ich befürchte, dass ich die Seite mit dem Code für einen angemeldeten Benutzer zwischenspeichern kann. Funktioniert das, oder muss ich etwas konfigurieren, damit es mit Sitzungen funktioniert?Ausgabeseite und Sitzungsseitenstatus
Antwort
Sie müssen die folgenden Änderungen vor:
hinzufügen VaryByCustom
Attribut und seinen Wert auf Benutzer in Ihrer OutputCache
Richtlinie wie folgt aus:
<%@ OutputCache VaryByCustom="User" .... %>
Dann in Ihrer Global.asax Datei, die Sie brauchen außer Kraft zu setzen GetVaryByCustomString
Methode wie folgt:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.Equals("User", StringComparison.InvariantCultureIgnoreCase))
{
// Return the user name/login as a value that will invalidate cache per authenticated user.
return context.User.Identity.Name;
}
return base.GetVaryByCustomString(context, custom);
}
Basierend auf Ihren Kommentare unten zu diesem anwser, Sie sagen, Sie verwenden Session-Variable, um zu überprüfen, ob der Benutzer angemeldet ist oder nicht. Lassen Sie mich Ihnen sagen, dass dies nicht die besten Praktiken sind, um die Authentifizierung so zu verwalten.
Jede Art und Weise die Lösung Cache ungültig zu machen, auf einem Sitzungswert abhängig ist, dies zu tun:
<%@ OutputCache VaryByCustom="Session" .... %>
Wieder VaryByCustom
kann jeder string
Wert, den Sie es, indem sie eine Bedeutung will seine string
ist wirklich gut und die Zukunft Devs lassen oder du weißt, was du getan hast.
außer Kraft setzen Dann
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.Equals("Session", StringComparison.InvariantCultureIgnoreCase))
{
// make sure that the session value is convertible to string
return (string)context.Session["Here you put your session Id"];
}
return base.GetVaryByCustomString(context, custom);
}
, dass alles, was Sie tun müssen, ist. Ich hoffe es hilft.
Können Sie mir bitte erklären, was es tut? Was bedeutet "Benutzer", gibt es einen Hinweis darauf, dass der Ausgabe-Cache etwas mit der Sitzung zu tun hat? –
Benutzer kann eine beliebige Zeichenfolge sein, die sich auf den Cache bezieht. Hier muss ich den Cache pro authentifiziertem Benutzer ungültig machen. Dann benutze ich die Zeichenfolge "User" (das kann alles sein), um den Cache-Parameter VaryByCustom zu identifizieren. Dieser Wert wird an die überschriebene Methode 'GetVaryByCustomString' in Global.axax übergeben. In dieser Methode sage ich dem Cache, ob der Benutzer sich geändert hat. – CodeNotFound
Gibt es eine Option, um Nicht-Cache-Seite für angemeldete Benutzer zu liefern. Ich benutze nicht den Build in ASP.NET Login, habe ich meine eigene implementiert und eine Sitzungsvariable gesetzt, um zu überprüfen, ob der Benutzer angemeldet ist oder nicht? –
Welchen Techno verwenden Sie ASP.Net WebForms oder ASP.Net MVC? – CodeNotFound
@CodeNotFound webforms –