2011-01-05 26 views
7

Nella mia app Web sto utilizzando alcune variabili di sessione, che vengono impostate quando effettuo l'accesso:timeout variabili di sessione in app asp.net

ad es. Session("user_id") = reader("user_id")

Uso questo tramite la mia app.

Quando la variabile di sessione scade, questo genera errori soprattutto durante la connessione al database poiché per alcune query è richiesto session("user_id").

Come posso impostare le mie variabili di sessione in modo tale che una volta scadute per andare alla pagina di accesso o come almeno aumentare il tempo di disponibilità?

risposta

11

Sto indovinando sta utilizzando autenticazione moduli. Il trucco qui è quello di garantire che l'autenticazione dei moduli scada prima della sessione.

Ho scritto di questo in questa risposta qui:

How to redirect to LogIn page when Session is expired (ASP.NET 3.5 FormsAuthen)

Ad esempio:

Configurare l'autenticazione basata su form - imposta il timeout a 60 minuti:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 

Estendere la scadenza della sessione per un tempo più lungo:

<sessionState 
    mode="InProc" 
    cookieless="false" 
    timeout="70"/> 

Nel codice Login.aspx dietro di voi potrebbe anche fare un Session.Clear(); per rimuovere i dati della sessione non aggiornati prima di assegnare i valori di sessione.

1

In passato ho utilizzato una pagina di base o una pagina principale su ogni pagina (facendo un'eccezione per la pagina di accesso) che legge un token di sessione per vedere se un utente ha effettuato l'accesso al momento.

Se legge un valore null, salva l'url corrente e reindirizza alla pagina di accesso.

Dopo aver effettuato il login, legge l'url salvato e reindirizza l'utente alla pagina richiesta.

L'aumento del valore di timeout della sessione è un'impostazione in IIS.

1

Come posso impostare le mie variabili di sessione in modo che una volta che sono a tempo fuori per andare alla pagina di login

verificare se sono = null fare un Response.Redirect("Home.aspx");

o come si può almeno aumentare il periodo di tempo disponibile?

la sua nel web.config all'interno sessionState elemento

0

Penso che molte persone eseguano il wrapping delle chiamate di sessione per fornire un modello "carico lento".Qualcosa del genere:

class SessionHelper 
{ 
    public static string GetUserId() 
    { 
     string userId = (string)System.Web.HttpContext.Current.Session["UserId"]; 

     if(userId == null) 
     { 
      userId = reader("UserId"); 
      System.Web.HttpContext.Current.Session["UserId"] = userId; 
     } 

     return userId; 
    } 
} 
Problemi correlati