2013-09-30 14 views
5

Ho una pagina di download con collegamenti a file memorizzati localmente sul server web. Tutto va bene quando un utente apre un file di testo, ma quando apre un file di Office e sceglie "Apri" dalla finestra di dialogo risultante in IE o Firefox, ASP crea una nuova sessione.Sessione ASP.MVC persa durante il download del file

Il mio metodo di controllo semplificata è:

<HttpGet()> 
<AppAuthorize(Domain.Security.TransactionId.Download)> 
Public Function Download(fileName As String) As ActionResult 
    ' fileName example: C:\ProgramData\MyCompany\MyApp\SomeFile.txt 
    Return New FilePathResult(fileName, "application/octet-stream") 
End Function 

debug mostra che, non appena si fa clic su "Apri" nel browser, l'evento Global.asax Session_Start() viene attivato.

enter image description here

se si salva il file e quindi visualizzare in IE una nuova sessione non viene creata. È solo un problema se fai clic sul pulsante Apri come mostrato sopra.

Perché è questo e come posso prevenirlo?

Il problema di fondo è che quando la mia app vede una nuova sessione iniziata e l'utente ha un cookie di autenticazione moduli valida, assume IIS riavviato ed elimina cookie dell'utente. Quindi ogni volta che un utente apre un documento Word, viene disconnesso dall'app.

+0

Si sta utilizzando lo stato sessione per l'autorizzazione dell'app? In tal caso, si verificano gravi problemi di sicurezza ... la sessione non dovrebbe mai essere utilizzata per motivi di sicurezza. –

+0

No, sto utilizzando un'implementazione personalizzata di Autenticazione moduli. Il collegamento tra lo stato della sessione e la "disconnessione" è che se rilevo una nuova sessione e l'utente ha un cookie di autenticazione delle form valido, suppongo che IIS resetta ed elimini il loro auth cookie per mantenere l'integrità dei dati. Vedi http://www.netnewsgroups.net/aspnet/t4780-forms-authentication-session-expiration.aspx – nunzabar

risposta

2

Quando si fa clic su un collegamento DOC in Internet Explorer, lo consegna a Word. Ciò significa che Word esegue il download, non IE. Per questo motivo, viene creata una nuova "connessione browser" e verrà creata una nuova sessione perché in realtà non è IE a eseguire il download.

+0

Ok, quindi questo spiega il "perché" ... ora come posso risolverlo? Questo deve essere uno scenario comune. – nunzabar

2

Sto rispondendo alla mia stessa domanda.

Ho trovato una soluzione dopo il Matt's answer mi ha indirizzato nella giusta direzione. Ho semplicemente invalida SessionState per il controller con l'aggiunta di un attributo come segue:

<SessionState(SessionStateBehavior.Disabled)> 
Public Class AttachmentController 
    ... 
End Class 

Ora Office può scaricare i file, ma non innescare una nuova sessione. La mia app non è più danneggiata.

Problemi correlati