sto usando cache di output per un sito web con sistema di login. Ho pagine globali a cui è possibile accedere da ogni utente. Queste pagine sono memorizzate nella cache e utilizzano anche una pagina principale.VaryByCustom non funziona per variabile di sessione
<%@ OutputCache Duration="3600" VaryByParam="none" VaryByCustom="userid" %>
che sto memorizzazione di password utente in una sessione. Il mio file global.asax è qui:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
string result = String.Empty;
if (arg == "userid")
{
object o = Session["UserID"];
if (o != null) { result = o.ToString(); }
}
else { result = base.GetVaryByCustomString(context, arg); }
return result;
}
ho un pannello nella pagina master che è visibile per gli utenti autenticati. Quando un utente accede e visualizza la pagina pubblica Un altro utente guest vede il pannello utente autenticato nella pagina A. Se guest visualizza prima la pagina A quindi l'utente autenticato non vede il pannello sulla pagina A.
Quale parte del mio codice è errata? Sto usando VaryByCustom per la prima volta.
EDIT
Ho modificato il mio global.asax come questo, ma nulla è scritto nel file di testo:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
string result = String.Empty;
FileInfo t = new FileInfo(Server.MapPath("App_Data\\debug.txt"));
StreamWriter Tex = t.AppendText();
Tex.WriteLine("GetVaryByCustomString: " + arg);
if (arg == "userid")
{
object o = Session["UserID"];
if (o != null) { result = o.ToString(); }
Tex.WriteLine("Checked UserID: " + o + Tex.NewLine);
}
else { result = base.GetVaryByCustomString(context, arg); }
Tex.Close();
return result;
}
OK, ho trovato che non posso accedere alla variabile di sessione corrente "Lo stato della sessione non è disponibile in questo contesto.". Cercando di aggiustarlo ora. –