2009-08-10 19 views
5

Sto usando OutputCache nella mia pagina che ha un controllo utente, ma non voglio mettere in cache questo specifico controllo utente perché è relativo ad un accesso utente (se accedo alla pagina, vedo la pagina come se fossi autenticato con un altro utente).Come non memorizzare nella cache un controllo utente ASP.NET?

Come posso farlo?

risposta

10

Personalmente io uso l'attributo VaryByCustom di dare il login e disconnesso utenti diverse pagine viste cache:

<%@ OutputCache VaryByCustom="IsLoggedIn" Duration="30" VaryByParam="*" %> 

poi nel Global.asax si mette

public override string GetVaryByCustomString(HttpContext context, 
    string arg) 
{ 
    if (arg == "IsLoggedIn") 
    { 

     if (context.Request.IsAuthenticated) 
     { 
      return "Logged in: " + context.User.Identity.Name; 
     } 
     else 
     { 
      return "Not Logged In"; 
     } 

    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 

} 

Sto solo andando a buttare questo là fuori Che ne dici del controllo di sostituzione?

http://msdn.microsoft.com/en-us/library/ms228212.aspx

Secondo il sito MSDN:

controllo la sostituzione consente di creare aree sulla pagina che può essere aggiornato in modo dinamico e quindi integrato in una pagina in cache. ... Il controllo di sostituzione offre una soluzione semplificata alla cache parziale della pagina per le pagine in cui la maggior parte dello del contenuto è memorizzata nella cache. È possibile eseguire l'output di nella cache dell'intera pagina, quindi utilizzare i controlli di sostituzione per specificare le parti della pagina che sono esenti dalla cache nella cache .

Non ho mai utilizzato personalmente il controllo di sostituzione, ma mi è capitato di cercarlo l'altro giorno, e sembrava che potesse in qualche modo iniettare contenuto aggiornato in un'uscita di pagina altrimenti memorizzata nella cache.

1

È possibile memorizzare nella cache una pagina e memorizzare nella cache un controllo utente, ma non è possibile memorizzare nella cache una pagina tranne un controllo utente. Quando il controllo utente viene eseguito, l'intera pagina deve essere eseguita. Devi rendere la cache di output per la pagina riconoscere i diversi utenti.

È possibile utilizzare VaryByHeader="Cookie" per memorizzare nella cache la pagina per ciascun set di cookie se l'identità dell'utente è memorizzata in un cookie. È possibile utilizzare VaryByCustom="SomeString" e implementare un assegno per SomeString per eseguire il proprio controllo sull'identità utente nel metodo GetVaryByCustomString in Global.asax.

Problemi correlati