2009-11-12 23 views
5

Ho un problema nel mio progetto. C'è un pannello di amministrazione nel mio sito web. Le persone possono accedere con un nome utente e la password può modificare il contenuto del sito web. A volte un utente può impiegare fino a 30-40 minuti per immettere contenuti, ma il timeout della sessione scade dopo solo 20 minuti.Come impostare il timeout della sessione più di 20 minuti?

Ho provato a configurare questo nella web.config, ad esempio:

<authentication mode="Windows"/> 
<sessionState timeout="60" /> 

e in questo modo:

<system.web> 
    <sessionState timeout="60"></sessionState> 
</system.web> 

e anche provato nella mia forma del genere:

if (ds.Tables["LOG"].Rows.Count > 0)   
{ 
    Session["IsLoggedIn"] = "true";   
    Session.Timeout = 60;    
    Response.Redirect("Default.aspx");  
}   
else  
{     
    Label1.Text = "Username/Password is wrong!!";  
} 

Nessuna delle soluzioni di cui sopra ha funzionato. Ho provato ciascuno separatamente e insieme, ma la sessione scade ancora dopo 20 minuti.

+0

Non proprio legato alla tua domanda, ma si dovrebbe considerare un messaggio di errore più bello su un accesso non riusciti. – Brandon

+0

Dovresti aggiustare la tua app in modo che qualsiasi timeout non sia importante: gli utenti inviano i loro contenuti, viene chiesto di accedere nuovamente e il loro contenuto non viene perso. Se hai intenzione di usare i timeout, qualcuno li colpirà per tutto il tempo che li fai. – RichieHindle

+0

Ho scritto un messaggio di errore migliore in turco, brandon, non preoccuparti :) –

risposta

12

Un altro suggerimento è quello di dare un'occhiata alle impostazioni di IIS. Quando ho dovuto cambiare i miei timeout ho dovuto apportare alcune modifiche al lato server. Controllare l'impostazione Timeout inattivo per il pool di applicazioni. Se il sito diventa inattivo (credo predefinito di 5 minuti), il pool di applicazioni si spegne per salvare le risorse del server. Questo ucciderà anche una sessione.

Provare ad aumentare il tempo di inattività per il pool di applicazioni per vedere se questo aiuta affatto.

IIS »Directory» Config »Opzioni E AppPool» Proprietà

Ovviamente se ci si trova in un ambiente di hosting condiviso è molto probabile che non essere in grado di regolare questo.

+0

sfortunatamente sono in un hosting condiviso Qubar. –

+1

Quando mi sono imbattuto nella situazione, sembrava che il timeout della sessione IIS prevalesse sempre su ciò che era definito nel web.config. Abbiamo dovuto passare da IIS a 60 minuti. Prova a lavorare con il tuo provider condiviso per scoprire cosa hanno impostato per un timeout della sessione e se c'è qualcosa che puoi fare al riguardo. – BStruthers

+0

Grazie mille !!! – Arpita

1

Sei sicuro che è la sessione che sta scadendo? Può anche essere causato dal timeout dell'autenticazione (ovvero il cookie di autenticazione è impostato per scadere dopo 20 minuti). Assicurarsi che sia il timeout della sessione sia il timeout di autenticazione siano impostati sullo stesso valore.

5

Quando si utilizza la modalità stato sessione predefinito di "InProc" (In elaborazione), così come sono, i dati dello stato sessione sono molto fragili e vengono persi ogni volta che l'AppPool ricicla.

Considerare l'utilizzo delle altre modalità di stato della sessione incorporate, che sono fuori processo e quindi sono immuni al riciclo di AppPool. Si tratta della modalità "StateServer" (viene eseguita in memoria in un processo separato) e della modalità "SqlServer" (dati di stato memorizzati nel DB di SQL Server).

Si vorrà utilizzare una di queste modalità di stato sessione fuori processo per fornire maggiore robustezza ai dati della sessione, soprattutto se si richiedono timeout di sessione più lunghi. Questo non risponde alla tua domanda sul perché la tua sessione scade prematuramente, ma farà parte della soluzione.

Le varie modalità di stato sessione hanno tutti i loro punti di forza e di debolezza in termini di robustezza, requisiti di memoria, scalabilità e prestazioni, quindi è necessario acquisire familiarità con loro al fine di identificare la scelta giusta per la vostra applicazione.

Come nota a margine, considerare sempre se i dati devono essere inseriti nella sessione. È generalmente preferibile utilizzare ViewState quando i dati sono richiesti tra i postback sulla stessa pagina, a condizione che la quantità di dati non sia eccessiva. È del tutto possibile sviluppare applicazioni ASP.NET che non usano affatto Session, o usarle con parsimonia, e in genere trovo che le cose funzionino molto più intuitivamente quando non usi Session ad es. il pulsante Indietro del browser.Il tuo DB è lì per mantenere i tuoi dati, quindi non esitare a usarlo. Se stai passando tabelle o set di dati tra le pagine utilizzando Session, valuta se è davvero necessario. Potresti passare i parametri tramite la stringa di query e quindi utilizzare i parametri per recuperare i dati dal tuo DB quando viene richiesta la pagina?

consultare: MSDN Session State Modes

+0

GRAZIE !!!!!! Ho visto questo commento per sbaglio cercando qualcosa di completamente diverso, stava avendo i problemi "InProc", ma non ho mai capito come risolverli. Grazie ancora, ottimo commento! –

Problemi correlati