2012-05-07 89 views
22

he especificado el tiempo de espera de la sesión en el archivo web.config ... cuando la sesión ha expirado no recibo la redirección a la página de inicio de sesión, pero estoy generando un error al decir referencia de objeto no establecido en una instancia.Cómo comprobar si la sesión ha expirado o no en asp.net

¿alguien puede decirme la solución para esto?

+2

Publique su código. ¿Cómo está verificando la caducidad de la sesión? – Oded

+0

Comparta su configuración web también – Deepesh

+0

Dos cosas diferentes: las sesiones no afectan el estado de autenticación directamente. Si usa FormsAuth, su estado de ticket sí lo hace. Por lo tanto, si necesita modular la validez de su ticket en el estado de la sesión (lo cual es una mala idea, por cierto), necesitará administrarlo manualmente. – HackedByChinese

Respuesta

14

Usted puede comprobar la propiedad HttpContext.Current.User.Identity.IsAuthenticated cual le permitirá saber si hay una autenticado actualmente usuario o no.

+6

¿La expiración de la sesión es completamente sinónimo de 'IsAuthenticated' que cambia a falso? – toddmo

+1

Ya sea un visitante por primera vez o un usuario con tiempo de espera excedido, 'HttpContext.User.Identity' tendrá los mismos valores. – Bardicer

9

Editar

se puede utilizar la propiedad IsNewSession para comprobar si la sesión se creó a petición de la página

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

tienda id de usuario en la variable de sesión cuando el usuario inicia sesión en el sitio web y verifica en su página maestra o en el formulario de página base creado que otra página hereda ... y en la carga de página compruebe que el ID de usuario i s presentes o no, si no que redirigir a la página de acceso

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

Gracias ... pero esto se puede usar solo para un valor de sesión. He usado más sesiones en mi proyecto, por lo que quiero el código especificado en el archivo web.config. ... que se aplica a todas las páginas – user1379439

+0

@ user1379439 - esto funcionará para todas las sesiones, no solo ... sesión se crea como registro de uso en el sistema ... ¿qué más quieres? tienes idea sobre la sesión ¿verdad? –

+0

@ user1379439 - vaya a esta url, puede obtener lo que desea ... http: //www.google.co.in/url? Q = http: //www.codeproject.com/Articles/227382/Alert-Session -El tiempo de espera-in-ASP-Net & SA = U & ei = LLKnT8PeMpDzrQe3itHRAQ y ved = 0CBIQFjAA y SIG2 = NDlgZI2yyYDIaQ3C1E-HGA y USG = AFQjCNF-3O2DlOTaG5dmjBsFqR63vmh2WQ –

6

Comprobar si es nulo o no, por ejemplo

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

Prefiero no verificar la variable de sesión en el código en lugar de usar FormAuthentication. Tienen la función incorporada de redirigir a la página de inicio de sesión especificada en web.config.

Sin embargo, si desea verificar explícitamente la sesión, puede verificar el valor NULO de cualquiera de las variables que creó en la sesión anterior, como respondió Pranay.

Puede crear la página Login.aspx y escriba su mensaje allí, cuando expira la sesión FormAuthentication redirigir automáticamente a loginUrl dada en la sección FormAuthentication

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

Lo que pasa es que no se puede dar a la página de inicio de sesión y separada SessionExpire, por lo que debe mostrar u ocultar alguna sección en Login.aspx para actuar de ambas maneras.

Hay otra manera de redireccionar a la página sessionexpire tras el tiempo límite sin cambiar formauthentication-> loginUrl, consulte el siguiente enlace para esto: http://www.schnieds.com/2009/07/aspnet-session-expiration-redirect.html

+0

Gracias ... obtuve el código de vencimiento de la sesión ... Ahora quiero que se muestre el mensaje o un mensaje de alerta cuando la sesión caduque para el usuario ... ¿Conoce el código para esto? – user1379439

+0

He modificado mi respuesta –

7

Uso Session.Contents.Count:

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

El código anterior supone que tener al menos una variable de sesión creada cuando el usuario visita su sitio por primera vez. Si no tiene uno, lo más probable es que no esté utilizando una base de datos para su aplicación. Para su caso, puede asignar manualmente una variable de sesión usando el siguiente ejemplo.

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

¡Mejor de suerte para usted!

2

Utilizo la respuesta @ Adi-lester y añado algunos métodos.

Método para verificar si la sesión está vivo

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

Crear sesión var en la carga de la página

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

Crear método SaveData (pero se puede utilizar en todos los métodos)

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

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

Aquí estoy verificando los valores de la sesión (dos valores rellenos en el cuadro de texto de la página anterior)

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

De esta forma, muchas personas detectan que la sesión ha expirado o no. el siguiente código puede ayudarlo.

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"); 
        } 
       } 
      } 
     } 
    } 
Cuestiones relacionadas