Timeout della sessione in ASP.NET


163

Sto eseguendo un'applicazione ASP.NET 2.0 in IIS 6.0. Voglio che il timeout della sessione sia di 60 minuti anziché i 20 minuti predefiniti. Ho fatto quanto segue

  1. Situato <sessionState timeout="60"></sessionState> in web.config.
  2. Impostare il timeout della sessione su 60 minuti in Gestione IIS / Proprietà sito Web / Impostazioni di configurazione ASP.NET.
  3. Impostare il timeout di inattività su 60 minuti nelle proprietà / prestazioni del pool di applicazioni.

Ricevo ancora un timeout della sessione a 20 minuti. C'è qualcos'altro che devo fare?


1
Fornisci informazioni su come hai misurato i 20 minuti. Assicuriamoci che i 20 minuti siano un timeout della sessione e non di qualche altro tipo.
John Saunders,

11
Contrassegna le risposte di qualità come accettate utilizzando il segno di spunta vicino alle frecce di voto positivo / negativo
Brian Webster

3
Otto anni dopo, la risposta corretta non è stata ancora accettata.
Nathan,

Chiarire cosa si intende per gestore IIS / Proprietà del sito Web / Impostazioni di configurazione ASP.NET. Passo dopo passo cosa hai cambiato in IIS?
Niico

Risposte:


275

Stai utilizzando l'autenticazione basata su moduli?

L'autenticazione basata su moduli utilizza il proprio valore per il timeout (30 minuti per impostazione predefinita). Un timeout di autenticazione moduli invierà l'utente alla pagina di accesso con la sessione ancora attiva. Questo potrebbe apparire come il comportamento della tua app quando scade la sessione, facilitando la confusione tra loro.

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

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

L'impostazione del timeout dei moduli su un valore inferiore al timeout della sessione può offrire all'utente una finestra in cui accedere nuovamente senza perdere i dati della sessione.


@Unbreakable In pochi minuti.
Word Rearranger,

44

Non conosco web.config o IIS. Ma credo che dal codice C # puoi farlo come piace

Session.Timeout = 60; // 60 is number of minutes

22
Questo regolerà solo il timeout della sessione corrente? O questo regolerà il timeout per l'intera applicazione?
Johncl,

2
Nulla nella documentazione indica che l'impostazione Session.Timeoutè diversa dall'uso di web.config o IIS, quindi presumo che sia per l'intera applicazione.
Drasive il

Penso che @Drasive abbia ragione, ma deve essere provato almeno da 2 client collegati separati al server e controllare il timeout della sessione inattiva.
QMaster

42

Utilizzare il seguente blocco di codice nel file web.config. In questo caso il timeout della sessione predefinito è di 80 minuti.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Utilizzare il seguente collegamento per Timeout sessione con messaggio di avviso popup.

Esempio di timeout della sessione

Cordiali saluti: Gli esempi sopra sono fatti con il controllo popup devexpress, quindi è necessario personalizzare / sostituire il controllo popup devexpress con il normale controllo popup. Se si utilizza devexpress non è necessario personalizzare


senza cucina falso?
Kiquenet,

3
@Kiquenet, se imposti il ​​cookieless su true, il tuo sessionId verrà incorporato nell'URL, che rappresenta un rischio elevato per la sicurezza. Il framework ASP.NET inserisce un ID univoco nell'URL, puoi verificarlo disabilitando il cookie o impostando l'attributo senza cookie su true come hai fatto tu. Secondo MSDN, per impostazione predefinita, il valore SessionID è memorizzato in un cookie di sessione non in scadenza nel browser ma se si specifica cookieless = "true", ASP.NET mantiene lo stato della sessione senza cookie inserendo automaticamente un ID sessione univoco nell'URL della pagina .
Hamza Khanzada,

8

Hai qualcosa in machine.config che potrebbe avere effetto? L'impostazione del timeout della sessione in web.config dovrebbe sovrascrivere qualsiasi impostazione in IIS o machine.config, tuttavia, se si dispone di un file web.config da qualche parte in una sottocartella nell'applicazione, tale impostazione sovrascriverà quella nella radice dell'applicazione.

Inoltre, se ricordo bene, il timeout in IIS interessa solo le pagine .asp, non .aspx. Sei sicuro che il codice della sessione in web.config sia corretto? Dovrebbe assomigliare a:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>

8

Nella mia situazione, era Pool di applicazioni. È impostato per il riavvio quando è inattivo per xx min. Quando lo imposto per non riavviarlo, sembra utilizzare il valore di Config. Web.


So che siamo il 2020, ma dannazione, ho appena risolto il mio problema, grazie!
Binary9

8

Di solito è tutto ciò che devi fare ...

Sei sicuro che dopo 20 minuti, il motivo per cui la sessione viene persa è inattivo anche se ...

Ci sono molte ragioni per cui la sessione potrebbe essere cancellata. È possibile abilitare la registrazione degli eventi per IIS e quindi utilizzare il Visualizzatore eventi per vedere i motivi per cui la sessione è stata cancellata ... Potresti scoprire che lo è per altri motivi, forse?

È inoltre possibile leggere la documentazione per i messaggi di evento e la tabella degli eventi associata .


3

Se si utilizza l'autenticazione, si consiglia di aggiungere quanto segue nel file web.config.

Nel mio caso, gli utenti vengono reindirizzati alla pagina di accesso al momento del timeout:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>

Ho ricevuto un errore qui <authentication mode = "Forms"> dopo averlo
inserito


2

Poiché le sessioni ASP.Net core 1.0 (vNext o qualunque sia il nome utilizzato) vengono implementate in modo diverso. Ho cambiato il valore di sessione di timeout in Startup.cs, void ConfigureServicesutilizzando:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

O se vuoi usare il appsettings.jsonfile, puoi fare qualcosa del tipo:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));

2

Puoi trovare l'impostazione qui in IIS:

impostazioni

È disponibile a livello di server, a livello di sito Web o di app in "ASP".

Penso che puoi impostarlo a livello web.config qui. Si prega di confermare questo per te.

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>

Anche in Global.asax?
Kiquenet,

1

Il valore di timeout delle sessioni IIS è solo per le applicazioni .asp classiche, questo è controllato sulla configurazione IIS. Nel tuo caso Per le app ASP.NET, si applica solo il valore di timeout specificato da web.config.


Che dire del timeout del pool di app di IIS?
SteveCav

1

Il timeout di sessione predefinito è definito in IIS a 20 minuti

Seguire le procedure seguenti per ciascun sito ospitato sul Web IIS 8.5

Configurazione timeout IIS

Apri Gestione IIS 8.5.

Fai clic sul nome del sito.

Seleziona "Editor di configurazione" nella sezione "Gestione".

Dall'elenco a discesa "Sezione:" nella parte superiore dell'editor di configurazione, individuare "system.web / sessionState".

Impostare il "timeout" su "00:20:00 o meno", utilizzando il valore più basso possibile a seconda dell'applicazione. I valori accettabili sono 5 minuti per applicazioni di alto valore, 10 minuti per applicazioni di valore medio e 20 minuti per basse -valore applicazioni.

Nel riquadro "Azioni", fai clic su "Applica".


0

se si desidera il timeout della sessione per il sito Web che rimuoverlo

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

tag dal file web.config.


-1

La proprietà Timeout specifica il periodo di timeout assegnato all'oggetto Session per l'applicazione, in minuti. Se l'utente non aggiorna o richiede una pagina entro il periodo di timeout, la sessione termina.

IIS 6.0: il valore minimo consentito è 1 minuto e il massimo è 1440 minuti.

Session.Timeout = 600;

-2

Dopo aver modificato il valore di timeout della sessione in IIS, riavviare IIS. Per ottenere ciò, vai al prompt dei comandi. Digitare IISRESET e premere Invio.


La modifica del file web.config provoca automaticamente il ripristino di IIS.
Timothy Gonzalez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.