Come impostare il timeout della sessione in web.config


179

Ho provato molto ma non riesco a trovare una soluzione su come impostare il valore di timeout della sessione per la sessione in-process per un'applicazione Web ASP.Net.

Sto usando VSTS 2008 + .Net 3.5 + C #. Ecco cosa ho scritto da solo per impostare il timeout su 1 minuto, è corretto?

Ho scritto nella sezione system.web nella web.config

<sessionState timeout="1" mode="InProc" />

5
Il modo in cui si definisce il timeout è corretto. Hai qualche problema con esso?
Darin Dimitrov,

7
Sai che questo significa che scadrà dopo 1 minuto di inattività, non dopo 1 minuto dall'inizio? La mia ipotesi è che se stai ponendo questa domanda e hai digitato correttamente il timeout, potresti essere fuorviante su come funziona.
Ivan Zlatanov,

1
Devo impostare il tempo di inattività, è proprio quello di cui ho bisogno. Grazie Ivan!
George2,

LOL! Non consiglierei di impostare il timeout a solo 1 minuto. Questo ucciderà l'usabilità!
Brian McCarthy,

3
Comprendo perfettamente la necessità di un breve periodo di timeout. Nel mio caso è testare l'usabilità del sito se la sessione scade e come reagisce quando l'utente torna. È difficile verificarlo mentre si esegue anche il debug a meno che il timeout della sessione non si verifichi rapidamente
Brett Weber,

Risposte:


323

Se si desidera impostare il timeout su 20 minuti, utilizzare qualcosa del genere:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20 minuti o ore? (timeout = "20")
Muhammad Awais,

21
Config indica il timeout in minuti, quindi 20 minuti
Wolfwyrd,

50

Il valore che stai impostando timeoutnell'attributo è uno dei modi corretti per impostare il valore di timeout della sessione.

L' timeoutattributo specifica il numero di minuti in cui una sessione può essere inattiva prima di essere abbandonata. Il valore predefinito per questo attributo è 20.

Assegnando un valore di 1 a questo attributo, hai impostato la sessione da abbandonare in 1 minuto dopo il suo inattività.

Per verificarlo, crea una semplice pagina aspx e scrivi questo codice nell'evento Page_Load,

Response.Write(Session.SessionID);

Apri un browser e vai a questa pagina. Verrà stampato un ID di sessione. Aspetta che passi un minuto, quindi premi Aggiorna. L'ID sessione cambierà.

Ora, se la mia ipotesi è corretta, vuoi fare in modo che i tuoi utenti si disconnettano non appena la sessione scade. Per fare ciò, puoi creare una pagina di accesso che verificherà le credenziali dell'utente e creerà una variabile di sessione come questa:

Session["UserId"] = 1;

Ora, dovrai eseguire un controllo su ogni pagina per questa variabile come questa -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Questo è un esempio spoglio di come funzionerà.

Ma, per rendere sicure le tue app di qualità di produzione, usa le classi Ruoli e Iscrizione fornite da ASP.NET. Forniscono un'autenticazione basata su moduli che è molto più affidabile della normale autenticazione basata su sessione che si sta tentando di utilizzare.


Ottimo consiglio ... Assicurati di impostare una variabile Session prima di testare con Response.Write (Session.SessionID); altrimenti, verrà aggiornato con un nuovo ID ogni volta che si aggiorna.
Chris Catignani,

1

Se si utilizza MVC, lo si inserisce nel file web.config nella directory principale dell'applicazione Web, non in web.config nella directory Views. Deve anche trovarsi nel nodo system.web, non come indicato da George2 nella sua domanda: "Ho scritto nella sezione system.web nel web.config"

Il valore del parametro di timeout rappresenta i minuti.

Esistono altri attributi che possono essere impostati nell'elemento sessionState. Puoi trovare informazioni qui: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

È quindi possibile rilevare l'inizio di una nuova sessione nel file Global.asax aggiungendo il seguente metodo:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

Usa questo in web.config:

<sessionState 

  timeout="20" 
/>

30
Non hai bisogno della maggior parte degli attributi che elenchi, timeoutdavvero. stateConnectionStringe sqlConnectionStringvengono ignorati quando mode="InProc"e i valori di modee cookielesssono impostati sui valori predefiniti. Quindi, questo si riduce alla risposta di Wolfwyrd.
Arcain,

0

Se non funziona web.config, è necessario impostarlo da IIS.

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.