2010-11-15 14 views
7

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; 
} 
+0

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. –

risposta

0

Penso che probabilmente la sessione [ "UserID"] per un po ' motivo restituisce sempre null/o alcune volte restituisce null, anche se l'utente è autenticato.

Doppio controllo che si imposta prima di questa funzione chiedere per essa.

+0

Vedo che la variabile di sessione è stata modificata, ma il problema è GetVaryByCustomString non è attivato/funziona correttamente Penso che –

+0

@hasanGursoy Sì, da qualche parte c'è il problema, ma se la funzione viene chiamata, il parametro di sessione non viene impostato. – Aristos

+1

@hasanGursoy Controlla questo http://www.aspmessageboard.com/showthread.php?t=174916 – Aristos

Problemi correlati