2010-12-10 11 views
12

¿Cuál es la mejor manera de desconectarse de un usuario cuando una sesión finaliza o expira?Cómo desconectarse de un usuario cuando una sesión expira o finaliza

Gracias por cualquier ayuda.

+1

¿Quiere decir simplemente que un usuario no se autentica, o para redirigir al usuario a "¡Hola, ha agotado el tiempo de espera!" página después de que han esperado demasiado y su sesión ha expirado? – Pandincus

+0

Ambos si es posible? – zSynopsis

+0

cuando la sesión finaliza, la próxima solicitud que realicen será no autenticada. En ese caso, su página puede verificarlo al cargar una nueva página. Para redirigirlos si han estado demasiado tiempo en la misma página, querrá escribir javascript en la página que tiene un temporizador de cuenta regresiva que iguala el valor de tiempo de espera de la sesión. Cuando el temporizador llega a cero redirecciona, porque la sesión no es válida. (Un poco, una advertencia es que si están navegando por su sitio en otra pestaña) eso mantendrá viva la sesión, mientras que la primera pestaña de javascript aún contará hacia atrás) – Prescott

Respuesta

11

Realmente depende de la funcionalidad deseada que estás buscando. Voy a suponer que estás usando FormsAuthentication.

Hay dos cosas separadas que necesita para estar preocupados: la Sesión y la cookie FormsAuthentication. A menos que me equivoque, ambos tienen tiempos de espera separados.

Si el problema que tiene es que la sesión se mide el tiempo fuera, pero el usuario todavía está autenticado, podría intentar una combinación de los siguientes:

1: Asegurarse de que la cookie de autenticación tiene el mismo valor de tiempo de espera como la sesión:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2: En el evento Page_Load, comprobar si la sesión ha expirado:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(Ver http://www.eggheadcafe.com/articles/20051228.asp para obtener información sobre la detección de un tiempo de espera de sesión)

Si desea una experiencia de usuario más agradable, puede usar javascript para iniciar una especie de ventana emergente de interfaz de usuario modal después de X minutos. Esta ventana emergente simplemente permitiría a un usuario iniciar un clic de botón que activaría una devolución de datos AJAX en el servidor, ampliando así su autenticación y la cookie de sesión sin tener que volver a cargar la página. Nunca lo he implementado antes, pero mira, this guy made an ASP.NET AJAX control!

+0

Gracias Pandincus – zSynopsis

Cuestiones relacionadas