2013-07-23 5 views
104

Ho un codice che sto cercando riguardo ai timeout di sessione del sito web. Nel web.config mi sono imbattuto in questo codice.Timeout di autenticazione moduli vs sessionState timeout

<authentication mode="Forms"> 
    <forms loginUrl="~/Auth/SignOn.aspx" timeout="40" slidingExpiration="true" /> 
</authentication> 

<sessionState timeout="30" /> 

Qualcuno sa se uno ha la precedenza sull'altro e in che modo sono diversi. Grazie.

+0

Eventuali duplicati di [autenticazione basata su form Timeout vs Timeout sessione] (http: // StackOverflow.it/questions/1470777/forms-authentication-timeout-vs-session-timeout) –

risposta

173

sono cose diverse. Il valore Timeout autenticazione moduli imposta la quantità di tempo in minuti in cui il cookie di autenticazione è impostato per essere valido, ovvero dopo il numero di minuti value, il cookie scadrà e l'utente non verrà più autenticato. Verranno reindirizzati al pagina di accesso automatica-. Il valore slidingExpiration=true sta fondamentalmente dicendo che dopo ogni richiesta effettuata, il timer viene resettato e finché l'utente effettua una richiesta entro il valore di timeout, continuerà ad essere autenticato. Se si imposta slidingExpiration=false il cookie di autenticazione scadrà dopo il numero di minuti value indipendentemente dal fatto che l'utente effettui una richiesta entro il valore di timeout o meno.

Il valore di timeout SessionState imposta la quantità di tempo necessario a un provider di stato sessione per conservare i dati in memoria (o qualsiasi altro backing store utilizzato, SQL Server, OutOfProc, ecc.) Per una determinata sessione. Ad esempio, se si inserisce un oggetto in Session utilizzando il valore nell'esempio, questi dati verranno rimossi dopo 30 minuti. L'utente può ancora essere autenticato ma i dati nella Sessione potrebbero non essere più presenti. Il valore Session Timeout viene sempre ripristinato dopo ogni richiesta.

+20

Un chiarimento: il timeout di autenticazione dei moduli imposta il tempo di scadenza per il [Ticket] (http://msdn.microsoft.com/en-us/ library/system.web.security.formsauthenticationticket.aspx) non necessariamente per il cookie in cui il ticket può essere memorizzato. Il cookie potrebbe non avere alcun tempo di scadenza (chiamato in modo confuso un cookie di sessione, il che significa che dura fino a quando l'utente chiude il browser), o potrebbe non esserci nemmeno un cookie (autenticazione dei moduli "senza cookie"). Nel caso di un cookie persistente, l'autenticazione dei moduli imposta la scadenza del cookie e la scadenza del ticket alla stessa ora. – bmode

+1

chi cancella i dati della sessione dalla memoria .... è che IIS o ASP.Net Engine o CLR? – Mou

+9

Un altro chiarimento da parte di MSDN: "Per evitare prestazioni compromesse e per evitare più avvisi del browser per gli utenti che hanno attivato i cookie, il cookie viene aggiornato quando è trascorso più della metà del tempo specificato." Quindi il timeout del cookie viene resettato solo se è finito a metà. Da qui il suggerimento di impostarlo su 2x il timeout della sessione. – user917170

16

Da quello che ho capito sono indipendenti l'uno dall'altro. Mantenendo il timeout della sessione inferiore o uguale al timeout di autenticazione, è possibile assicurarsi che tutte le variabili di sessione specifiche dell'utente non vengano mantenute dopo il timeout dell'autenticazione (se questa è la tua preoccupazione, che ritengo sia normale quando chiedi questo domanda). Ovviamente, dovrai gestire manualmente lo smaltimento delle variabili di sessione dopo la disconnessione.

Ecco una risposta decente che può rispondere alla tua domanda, o almeno si punto nella giusta direzione:

5

La differenza è che uno (Timeout moduli) ha a che fare con l'autenticazione dell'utente e l'altro (Timeout sessione) ha a che fare con quanto tempo i dati memorizzati nella cache sono archiviati sul server. Quindi sono cose molto indipendenti, quindi non si ha la precedenza sull'altra.

13

Lo slidingExpiration = vero valore sta sostanzialmente dicendo che dopo ogni richiesta effettuata, il timer viene resettato e fino a quando l'utente effettua una richiesta entro il valore di timeout, che continuerà ad essere autenticato.

Questo non è corretto. Il timeout del cookie di autenticazione verrà resettato solo se è trascorso metà del tempo di timeout.

Vedi per esempio https://support.microsoft.com/de-ch/kb/910439/en-us o https://itworksonmymachine.wordpress.com/2008/07/17/forms-authentication-timeout-vs-session-timeout/

+1

Sei corretto. – user917170

2
 <sessionState timeout="2" /> 
     <authentication mode="Forms"> 
      <forms name="userLogin" path="/" timeout="60" loginUrl="Login.aspx" slidingExpiration="true"/> 
     </authentication> 

Questa configurazione mi manda alla pagina di login ogni due minuti, che sembra controbattere le risposte precedenti

+1

Questo potrebbe accadere se le informazioni relative al login sono memorizzate nelle variabili di sessione e quando si cancella, reindirizza al login. Quindi dipende dal codice? – Steve