2009-04-02 29 views
6

Tengo que implementar la funcionalidad de auto-sesión en uno de mis proyectos y simplemente no puedo encontrar dónde empezar a buscar ideas, pero SO.Asp.net: Implementando la funcionalidad de Auto-Logout

Lo que necesito es que la aplicación redirija al usuario a la página de inicio de sesión si la sesión del usuario ha expirado. Dígame cuál debería ser mi enfoque para abordar este requisito.

Planteamiento del problema: Si el usuario abandona el sistema durante más de n minutos en cualquier instancia de inicio de sesión dada, el sistema les debe cerrar la sesión automáticamente.

Respuesta

6

Esto se ha logrado mediante la siguiente manera:

1) Registrar la marca de tiempo de cada solicitud (servidor y Ajax con exclusión de la solicitud de verificación ajax sesión) al servidor en una sesión var.

2) Encuestar el servidor a través de una función JS utilizando ajax a intervalos frecuentes y comprobar si el tiempo difiere entre el tiempo de la sesión y el tiempo de solicitud ajax es mayor que el valor de tiempo de sesión de sesión y desconectar el usuario actual y devuelve un bool para esa solicitud ajax.

3) Redirija la página actual a la página de inicio de sesión si el bool devuelto es verdadero.

+2

Debe marcar esto como la respuesta para ahorrarle tiempo a la gente que lo usa –

1
+0

sé qué estado de sesión es solo quiero redirigir al usuario a la página de inicio de sesión cuando caduque. – renegadeMind

+0

No leíste toda la página, ¿eh? Lea la sección 'Ejemplo de aplicación de estado de sesión' en el enlace anterior. Modifique el método 'CheckSession', y en lugar de la línea 'span1.InnerHtml =' 'NADA, LOS DATOS DE LA SESIÓN PERDIDOS!' '- agregue código para redireccionar a su página. – sangupta

0

Dado que usted no sabe por dónde empezar, puede encontrar este artículo útil 4guys: http://www.4guysfromrolla.com/webtech/110701-1.shtml

Editar

suena como el jQuery timer puede ser útil si desea redirigir a una url después de que haya transcurrido un período de tiempo conocido (es decir, el período de vencimiento de la sesión).

Espero que esto ayude.

+0

sé Autenticación funciona; ¿cómo me va a ayudar? ¡Por favor, comprenda que el usuario no interactuará con el sitio y que la aplicación lo redireccionará a la página de inicio de sesión cuando caduque la sesión! Va a ser una cosa del lado del cliente! – renegadeMind

+0

Quizás considere volver a escribir su pregunta para que quede más clara para las personas que están dispuestas a pasar tiempo ayudándole. –

+0

bien, pensé que la palabra auto-logout era auto explicativa; ¡Supongo que no es así! – renegadeMind

14

Continuando con los comentarios tanto como la pregunta, no estoy seguro de si está buscando algo que desconecte al usuario después de un cierto tiempo, independientemente de la actividad, o simplemente después de un período de inactividad.

Si estás dispuesto a utilizar el estándar ASP.NET mechanisms, esto se puede hacer por usted sin ningún trabajo importante:

Configurar el membership provider.

asegurarse de que su authentication section define un loginUrl:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" /> 
</authentication> 

Se puede establecer un tiempo de espera que no sea el valor por defecto de 30 minutos usando el atributo "tiempo de espera" en la forms element:

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" timeout="15"/> 
</authentication> 

Esto registrará el usuario sale después de 15 minutos de inactividad en su sitio (ya sea con el navegador abierto sin javascript "latido" o si pasan 15 minutos en otro sitio).

Denegar el acceso a usuarios anónimos

<authorization> 
    <deny users="?" /> 
</authorization> 

A continuación, asegúrese de que su nombre de usuario, registro y páginas de contraseñas posiblemente olvidados son accesibles a todos los usuarios utilizando el location Element:

<location path="Logon.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<location path="Register.aspx"> 
    <system.web> 
    <authorization> 
     <allow users="?"/> 
    </authorization> 
    </system.web> 
</location> 
<!-- etc --> 

De esta manera, cuando la autenticación de un usuario cookie expira serán redirigidos a la URL especificada en el elemento loginUrl de su página de formularios.


Si usted no está utilizando los mecanismos estándar de ASP.NET, entonces probablemente sería mejor implementar una "página base" modelo tipo.

Cree una nueva clase que herede de System.Web.UI.Page que verificará el estado de inicio de sesión del usuario, y si no está conectado/sin tiempo, redirigirlos a su página de inicio de sesión.

En sus páginas que se van a bloquear, en lugar de heredar de System.Web.UI.Page, hereda de su clase de página base (un ejemplo de este tipo de configuración para hacer algo similar; verifique la configuración de cada página) se puede ver en my answer here


Su página de inicio de sesión, probablemente tendrá que tener algún marco que revienta JS en ella para saltar de nuevo fuera del marco flotante:

if (top!=self.parent){ 
    top.location=self.parent.location; 
} 

¿O está diciendo que al presionar "volver" todavía pueden ver sus páginas a través del caché de los navegadores? En cuyo caso tendrá que estar jugando un poco con las cabeceras de caché en cada página:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 

Ok, bueno, en ese caso usted también necesitará un objeto de temporizador JS para realizar una ubicación. sustituir a la página de inicio de sesión - tener esto en un control de usuario en cada página (o mejor aún, en su página maestra) para redirigir automáticamente al usuario después de n minutos:

<script type="text/javascript"> 
    setTimeout('location.Replace("/login.aspx")', 900000); 
</script> 

el está en milisegundos de tiempo, por lo que esta voluntad muévelos en 15 minutos y no es necesario que todo el framework jQuery esté en su lugar solo para eso.

También puede que desee ver en la etiqueta meta de actualización:

<meta http-equiv="refresh" content="900;url=http://example.com/login.aspx" /> 

lo que obligará al navegador para actualizar a la página de inicio de sesión después de 15 minutos (de éste en segundos).

+0

Esta es mi declaración de Prob: si el usuario abandona el sistema durante más de n minutos en cualquier instancia de inicio de sesión determinada, el sistema debería cerrarla automáticamente. Lo siento si la pregunta no se enmarcó correctamente. – renegadeMind

+0

Si usa la autenticación de formularios, establezca el atributo de tiempo de espera en "n" minutos, y su token de autenticación caducará después de "n" minutos de inactividad, ya sea una ventana del navegador abierta o deambulando a otro sitio para ese momento . –

+0

He agregado algunos detalles para incluir la configuración de tiempo de espera, así como para hablar sobre la posibilidad de modificar los encabezados de caché para las páginas. –

Cuestiones relacionadas