2012-05-07 33 views
22

ho specificato il timeout della sessione nel file web.config..quando la sessione è scaduta, non sto ricevendo il reindirizzamento alla pagina di accesso, ma sto ricevendo un errore che dice riferimento all'oggetto non impostato su un'istanza.Come verificare se la sessione è scaduta o meno in asp.net

qualcuno può dirmi la soluzione per questo?

+2

Invia il tuo codice. Come stai controllando la scadenza della sessione? – Oded

+0

Condividi anche la tua configurazione web – Deepesh

+0

Due cose diverse: le sessioni non influiscono direttamente sullo stato di autenticazione. Se utilizzi FormsAuth, lo stato del ticket è valido. Quindi, se è necessario mettere a confronto la validità del ticket nello stato della sessione (che è una cattiva idea, BTW), è necessario gestirlo manualmente. – HackedByChinese

risposta

14

È possibile controllare la proprietà HttpContext.Current.User.Identity.IsAuthenticated, che vi permetterà di sapere se c'è un momento autenticato utente o no.

+6

La scadenza della sessione è completamente sinonimo di "IsAuthenticated" che diventa falso? – toddmo

+1

Se un visitatore per la prima volta o un utente scaduto, 'HttpContext.User.Identity' avrà gli stessi valori. – Bardicer

9

Modifica

è possibile utilizzare la proprietà IsNewSession per verificare se la sessione è stato creato su richiesta della pagina

protected void Page_Load() 
{ 
    if (Context.Session != null) 
    { 
     if (Session.IsNewSession) 
     { 
     string cookieHeader = Request.Headers["Cookie"]; 
     if ((null != cookieHeader) && (cookieHeader.IndexOf("ASP.NET_SessionId") >= 0)) 
     { 
      Response.Redirect("sessionTimeout.htm"); 
     } 
     } 
    } 
} 

pre

Conservare userid nella variabile di sessione quando l'utente accede al sito Web e controlla la tua pagina principale o il modulo della pagina di base creato mentre l'altra pagina viene ereditata ... e nel caricamento della pagina controlla che l'utente sia i s presenti o meno, se non di reindirizzamento alla pagina di login

if(Session["Userid"]==null) 
{ 
    //session expire redirect to login page 
} 
+0

Grazie ... ma questo può essere utilizzato solo per un valore di Session. Ho usato più sessioni nel mio progetto così voglio il codice specificato nel file web.config ... che si applica a tutte le pagine – user1379439

+0

@ user1379439 - questo funzionerà per tutte le sessioni, non per la singola ..... la sessione viene creata come utilizza l'accesso al sistema ... che altro vuoi? hai idea della sessione giusta? –

+0

@ user1379439 - vai a questo URL potresti ottenere quello che vuoi ... http: //www.google.co.in/url? Q = http: //www.codeproject.com/Articles/227382/Alert-Session -Time-out-in-ASP-Net & sa = U & ei = LLKnT8PeMpDzrQe3itHRAQ & ved = 0CBIQFjAA & SIG2 = NDlgZI2yyYDIaQ3C1E-HGA & USG = AFQjCNF-3O2DlOTaG5dmjBsFqR63vmh2WQ –

6

Verificare se è nullo o non è ad esempio

if(Session["mykey"] != null) 
{ 
    // Session is not expired 
} 
else 
{ 
    //Session is expired 
} 
7

preferisco non controllare variabile di sessione nel codice invece usare FormAuthentication. Hanno funzionalità incorporate per reindirizzare a LoginPage specificata in web.config.

Tuttavia, se si desidera controllare esplicitamente la sessione è possibile verificare la presenza di valore NULL per qualsiasi della variabile si è creato in sessione precedente come rispose Pranay.

È possibile creare pagina Login.aspx e scrivere il messaggio lì, quando sessione scade FormAuthentication reindirizzare automaticamente loginUrl di cui al punto FormAuthentication

<authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" protection="All" timeout="30"> 
    </forms> 
</authentication> 

La cosa è che non si può dare la pagina separata per Login e SessionExpire, quindi devi mostrare/nascondere alcune sezioni su Login.aspx per agire in entrambe le direzioni.

C'è un altro modo per reindirizzare sessionexpire pagina dopo timeout senza cambiare formauthentication-> loginUrl, consultare il link sottostante per questo: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html

+0

Grazie .. ho ottenuto il codice Scadenza sessione ... Ora voglio che venga visualizzato il messaggio o un messaggio di avviso quando la sessione scade all'utente ... Conosce il codice per questo? – user1379439

+0

Ho modificato la mia risposta –

7

Uso Session.Contents.Count:

if (Session.Contents.Count == 0) 
{ 
    Response.Write(".NET session has Expired"); 
    Response.End(); 
} 
else 
{ 
    InitializeControls(); 
} 

Il codice di cui sopra presuppone che si avere almeno una variabile di sessione creata quando l'utente visita per la prima volta il tuo sito. Se non ne hai uno, probabilmente non utilizzerai un database per la tua app. Per il tuo caso puoi semplicemente assegnare manualmente una variabile di sessione usando l'esempio qui sotto.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["user_id"] = 1; 
} 

Buona fortuna a te!

2

Uso la risposta @ Adi-lester e aggiungo alcuni metodi.

metodo per verificare se la sessione è vivo

public static void SessionIsAlive(HttpSessionStateBase Session) 
{ 
    if (Session.Contents.Count == 0) 
    { 
     Response.Redirect("Timeout.html"); 
    } 
    else 
    { 
     InitializeControls(); 
    } 
} 

Crea sessione var nel caricamento della pagina

protected void Page_Load(object sender, EventArgs e) 
{ 
    Session["user_id"] = 1; 
} 

metodo Create SaveData (ma è possibile utilizzarlo in tutti i metodi)

protected void SaveData() 
{ 
    // Verify if Session is Alive 
    SessionIsAlive(Session); 

    //Save Data Process 
    // bla 
    // bla 
    // bla 
} 
1

Qui sto controllando i valori di sessione (due valori compilati nella casella di testo nella pagina precedente)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["sessUnit_code"] == null || Session["sessgrcSerial"] == null) 
    { 
     Response.Write("<Script Language = 'JavaScript'> alert('Go to GRC Tab and fill Unit Code and GRC Serial number first')</script>"); 
    } 
    else 
    { 

     lblUnit.Text = Session["sessUnit_code"].ToString(); 
     LblGrcSr.Text = Session["sessgrcSerial"].ToString(); 
    } 
} 
1

in questo modo molte persone hanno rilevato che la sessione è scaduta o meno. il codice qui sotto può aiutarti.

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (Context.Session != null) 
     { 
      if (Session.IsNewSession) 
      { 
       HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"]; 
       if (newSessionIdCookie != null) 
       { 
        string newSessionIdCookieValue = newSessionIdCookie.Value; 
        if (newSessionIdCookieValue != string.Empty) 
        { 
         // This means Session was timed Out and New Session was started 
         Response.Redirect("Login.aspx"); 
        } 
       } 
      } 
     } 
    } 
Problemi correlati