2009-07-09 3 views
8

(vedere la domanda qui sotto per maggiori contesto):<machineKey decryptionKey = "AutoGenerate" ... viene ignorato da IIS. non invalida i cookie di sessione precedente

Esistono situazioni in cui

<machineKey 
     validationKey="AutoGenerate,IsolateApps" 
     decryptionKey="AutoGenerate,IsolateApps"/> 

nel web.config non riuscirebbe a AutoGenerate una nuova machinekey su App Riciclare la piscina? Questo è il comportamento che sto vedendo ...


Sto utilizzando i moduli ASP.NET standardAuthentication in un'app MVC. Se registro un utente utilizzando FormsAuthentication.GetAuthCookie e non utilizzo un cookie persistente (basandosi sulla sessione del browser per ricordare il mio stato autorizzato), mi aspetterei di riciclare il Pool di applicazioni IIS per invalidare la conoscenza della sessione di questo cookie ... e quindi disconnetti tutti gli utenti che non hanno cookies persistenti.

Questo si verifica in una delle mie installazioni IIS (XP), ma su una configurazione IIS diversa (Server 2K3) il cookie FormsAuthentication (con il nome standard ".ASPXAUTH") rimane valido e continua ad autorizzare l'utente.

Qualcuno sa perché questo sta accadendo o quale configurazione controlla questo comportamento?

Ovviamente il riciclo del pool di applicazioni non ha alcun controllo sul fatto che il browser invii o meno il cookie .ASPXAUTH (a condizione che non abbia chiuso il browser e che il cookie non sia scaduto).

Nel caso di IIS installazione che nega correttamente l'autenticazione dopo un riciclo, posso vedere il cookie in entrata nel Request.Cookies durante l'evento Application_BeginRequest ... ma una volta che il controllo si sposta al prossimo evento disponibili in Global.asax.cs (Application_AuthenticateRequest), il cookie è stato rimosso dalla raccolta Request.Cookies.

Perché ciò non accade per entrambe le configurazioni IIS/ASP.NET?


Nel caso in cui questo non è chiaro, un modo più semplice di formare la domanda è:

Perché HttpContext.Current.Request.Cookies[".ASPXAUTH"] cambiamento da {System.Web.HttpCookie} a nulla quando faccio un passo, in una singola richiesta, Application_BeginRequest-Application_AuthenticateRequest?


Maggiori informazioni di debug:

Se allego il seguente codice all'evento FormsAuthentication_OnAuthenticate di Global.asax.cs ...

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
if (cookie != null) 
{ 
    var val = cookie.Value; 
    try 
    { 
     FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val); 
    } 
    catch (Exception) 
    { 
    } 
} 

... poi durante una richiesta prima I riciclare il pool di applicazioni IIS, non verrà rilevata alcuna eccezione. Dopo aver riciclato il pool di applicazioni IIS, quando lo stesso esatto cookie .ASPXAUTH viene inviato dal browser, viene rilevata un'eccezione crittografica ("Il riempimento non è valido e non può essere rimosso.")

Perché è questo?

+1

È configurato per utilizzare l'ASP.Servizio di stato della rete per archiviare la sessione anziché inproc? – devstuff

+0

Buon pensiero - no, stanno entrambi usando InProc, sfortunatamente. – kamens

risposta

-2

Forms I cookie di autenticazione non hanno nulla a che fare con lo stato della sessione.

+0

1) Il riciclo del pool di app ricicla la sessione (se si utilizza la gestione delle sessioni InProc) e questo * sembra * a volte manipola il cookie ASPXAUTH (come si vede quando viene rimosso dopo l'evento BeginRequest). 2) Farò la mia domanda più chiara indicando "sessione del browser". Da documentazione MS: createPersistentCookie Tipo: System.Boolean true per creare un cookie durevole (uno che viene salvato attraverso le sessioni del browser); altrimenti, falso. – kamens

+0

Sciocchezze. I cookie risiedono sui clienti. Nulla di ciò che puoi fare al server rimuoverà i cookie memorizzati sui client. –

+0

Lo penseresti, vero? Il cookie non viene rimosso dal server fino al completamento di Application_BeginRequest. So quanto sia ridicolo questo, ed è per questo che sto postando questa domanda. Ho un debugger attivo e quando passo da Application_BeginRequest a Application_AuthenticateRequest, il valore di HttpContext.Current.Request.Cookies [". ASPXAUTH"] cambia da {System.Web.HttpCookie} a null. – kamens