2011-02-04 10 views
8

Nella mia applicazione Web asp.net al caricamento della pagina, raccolgo l'url della pagina corrente e lo memorizzo in una variabile di sessione per tenere traccia della pagina su cui l'utente è attivo in modo che possano tornare ad esso se entrano un'area di amministrazione, fare un po 'di navigazione, ecc. Possono quindi fare clic sul pulsante di ritorno e accedere alla pagina in cui si trovavano prima di entrare nell'amministratore.Variabile di sessione respinta da Chrome e FF

Tutto questo funziona in IE8; tuttavia in FF e Chrome quando nell'admin il link di ritorno reindirizza alla pagina 404 personalizzata che ho per l'app web.

A scopo di verifica ho aggiunto il codice che ho scritto qui di seguito con il mio evento di caricamento della pagina:

Response.Write((string)Session["navurl"]);// displays "http://somedomain.com/customerror/default.aspx" 
Session["navurl"] = currentUrl;//ex. currentUrl = "http://somedomain.com/contact/" 
Response.Write((string)Session["navurl"]);//ex. currentUrl = "http://somedomain.com/contact/" 

Ancora una volta questo funziona senza problemi in IE, ma in FF e Chrome a pagina caricare la variabile di sessione visualizza la Link a 404 pagine e dopo averlo impostato visualizza il link corretto. Ho usato il violinista per vedere cosa stava succedendo e Chrome sta lanciando un 404 nell'intestazione GET per il file favicon.ico, che non sto utilizzando in questa web app.

Ho aggiunto il file faviocon e il link nella testa del file site.master e Chrome e FF ora funzionano correttamente; Non sono ancora sicuro del perché questo sta accadendo. Qualcuno ha un'idea sul perché o sul modo in cui la mia variabile Session viene sovrascritta da Chrome o FF?

Come nota a margine, ho eseguito il debug del processo e currentUrl è l'URL corretto.

+0

Vuole favicon per mostrare sulla scheda, ma per quanto riguarda il motivo per cui è fermarsi dopo il 404 in FF e chrome ... Penso che tu abbia un altro problema che non stai identificando. È un problema di cache stantio? Entrambi nascondono pesantemente. – jcolebrand

+0

Stai per caso utilizzando l'autenticazione di moduli o altro NTLM? Ho notato che occasionalmente accade qualcosa di divertente in questi casi con F/Chrome e non IE – DarylChymko

risposta

0

Quando accedi all'amministratore, stai conservando la sessione? Usando Fiddler hai visto un'altra richiesta per la tua pagina? Cerca tag immagine con src = "" o iframe.

È necessario impostare la variabile Session su tutte le pagine front-end, ma non è mai necessario impostarlo sulle pagine di amministrazione, solo per creare il collegamento "Indietro". Se si utilizzano eventi Global.asax, fare attenzione a non modificare la variabile durante la pubblicazione delle pagine di amministrazione.

1

Bene, se si utilizza il gestore .NET per servire tutte le pagine (ad esempio tutte le estensioni di file), allora ha senso che quando il browser eseguirà una richiesta per favicon.ico (google per capire di cosa si tratta) , il server non riesce a trovarlo e reindirizza a 404. Che a sua volta modifica la variabile Session come "l'ultima pagina servita": 404.

Ora quando si esegue il rendering della pagina di amministrazione e si interroga la sessione per " l'ultima pagina è stata pubblicata "cosa ottieni? "404".

Io suggerirei di controllare l'URL per vedere se Refer a una pagina utente-navigationable prima di riporlo in seduta

if (IsAUserPage(currentUrl) 
    Session["navurl"] = currentUrl;