2012-02-06 23 views
9

Attualmente sto implementando il mio provider di sessioni personali e vorrei sapere se il valore predefinito di 20 minuti è impostato nel provider di sessione se una voce nel file di configurazione non esiste, o se il mio fornitore di sessioni dovrebbe da un altro posto.Come ottenere il valore di timeout della sessione in un provider di sessione quando non è impostato nella configurazione?

+0

Se si implementa il proprio fornitore di sessione, si dovrebbe considerare che si deve guardare nel file di configurazione per vedere se ci sono le impostazioni per il provider predefinito. Tuttavia dovresti cercare nella tua configurazione (per il tuo fornitore di sessioni) di scoprire il timeout per la tua implementazione. – Peter

+0

L'ho preso in considerazione, ma voglio sapere se il 20 minuti è un dettaglio di implementazione nel provider di sessione predefinito o se è disponibile altrove. –

risposta

15

Impossibile trovare il valore in un file di configurazione globale, ma è definito da qualche parte.

Utilizzando il codice seguente è possibile ottenere il valore di timeout della sessione, indipendentemente dal fatto che sia definito o meno nel web.config locale.

Configuration conf = WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath); 
SessionStateSection section = (SessionStateSection) conf.GetSection("system.web/sessionState"); 
int timeout = (int) section.Timeout.TotalMinutes; 
0

http://msdn.microsoft.com/en-us/library/aa478952.aspx

Secondo l'articolo che ho linkato sopra, se il valore di timeout non è impostato da nessuna parte, saranno utilizzati un valore predefinito di 20 minuti. Questo sembra essere il caso per entrambi i fornitori personalizzati e built-in.

+0

Ho letto anche questo, ma ho bisogno del valore di Timeout corrente e 'HttpContext.Session' è' null'. –

+0

http://stackoverflow.com/questions/1382791/asp-net-what-to-do-if-current-session-is-null se httpcontext.session è null, l'oggetto della sessione non viene avviato e non vi è nessun timeout e nessun'altra informazione relativa alla sessione. –

+0

Sono abbastanza sicuro che sia stato costruito ** dopo ** chiamando il fornitore della sessione. –

0

Si può semplicemente utilizzare Session.Timeout per ottenere il valore

+0

'HttpContext.Session' è' null'. –

0

In Global.asax, è possibile impostare

Session.TimeOut

in Session_Start o impostarlo in altro luogo nel codice.

+0

La domanda riguarda l'ottenimento del valore e 'HttpContext.Session' è nullo. –

+0

Hai provato a utilizzare HttpContext.Current.Session? – antar

+0

In realtà avevo un 'HttpContext 'istanziato che rappresentava il contesto attuale. 'HttpContext.Current.Session' è quindi anche' null'. –

6

Prova con:

System.Int64 timeout = System.Web.HttpContext.Current.Session.Timeout; // The time-out period, in minutes 
+0

questo genererà un'eccezione di riferimento null quando non è stata avviata una sessione corrente (ad esempio durante l'avvio dell'app) –

Problemi correlati