Pregunta

Estoy trabajando en una aplicación GWT-EXT. En esta aplicación administré la sesión del lado del cliente. Para esto escribo a continuación el código:

Para administrar la sesión: import com.google.gwt.user.client.timer;

public class ClientTimers {

    private static final Timer SESSION_MAY_HAVE_EXPIRED_TIMER = new Timer() {

        @Override
        public void run() {
            // Warn the user, that the session may have expired.
            // You could then show a login dialog, etc...
        }
    };

    public static void renewSessionTimer() {

        // First cancel the previous timer
        SESSION_MAY_HAVE_EXPIRED_TIMER.cancel();

        // Schedule again in 5 minutes (maybe make that configurable?)
        // Actually, let's subtract 10 seconds from that, because our timer
        // won't be synchronized perfectly with the server's timer.
        SESSION_MAY_HAVE_EXPIRED_TIMER.schedule(5 * 60 * 1000 - 10000);
    }
}

Para obtener la actividad del usuario:

    Ext.get("pagePanel").addListener("click", new EventCallback() {
        @Override
        public void execute(EventObject e) {
            //MessageBox.alert("On Mouse Click");
    });

    Ext.get("pagePanel").addListener("keydown", new EventCallback() {

        @Override
        public void execute(EventObject e) { //
            //MessageBox.alert("On Key Press Click");
        }
    });

Este código funciona bien, pero mis problemas: este código informará automáticamente a medida que ocurra el tiempo de espera. Para mi código, quiero que haga clic o KEACHE, debería hacer el inicio de sesión. El caso es así: si el usuario inicia sesión y el tiempo para iniciar sesión es de 5 minutos. El usuario no realiza ninguna actividad en la pantalla que en este momento según el código anterior, se registrará automáticamente a medida que se complete los 5 minutos.

Ahora mi requisito es que si el usuario inició sesión y no hace nada durante 5 minutos. Entonces debería hacer el proceso de cierre de sesión.

Básicamente, el proceso de cierre de sesión a medida que el temporizador excede el tiempo especificado debe realizarse en la actividad del usuario, no automáticamente.

¿Fue útil?

Solución

En el temporizador, incrementa una variable para cada segundo. Y cuando el usuario haga clic en cualquier botón después de 5 minutos o en el sexto minuto que verifique la variable de contador y si la variable es mayor de 6 de lo que puede usar Window.location.Reload (); a sesión o recargar ().

Otros consejos

Creo que lo que buscas es:

Window.location.Reload ();

Dispare cada pocas seconas con un temporizador, por lo que el usuario siempre aporta estar activo.

(Por cierto tengo eso de Problemas de cierre de la ventana en GWT -EXT )

Instale un controlador de eventos JavaScript en un div invisible que cubra toda el área. Si obtiene un evento, envíe una solicitud AJAX al servidor.

El servidor puede hacer lo que sea necesario. En el lado del cliente, puede esperar una respuesta de la solicitud AJAX y la pantalla "Ha sido registrado".

Hay un inconveniente de este enfoque: los objetos almacenados en la sesión se mantendrán vivos durante demasiado tiempo. Entonces, incluso si el usuario nunca cierre y simplemente se aleja (o su navegador se bloquea), la sesión se mantendrá viva.

Después de un par de días, muchas sesiones muertas acumularán que su servidor se bloqueará.

Entonces, la mejor solución es inicio de sesión automáticamente al usuario como ya lo hace y Instale un controlador de eventos AJAX como se describió anteriormente para mostrar un mensaje cuando el usuario vuelve al navegador.

De esta manera, su servidor puede limpiar las sesiones muertas y el usuario recibe un mensaje cuando puede leerlo (cuando está frente a la pantalla).

Tenga en cuenta que no puede diferenciar entre el usuario y el equipo de limpieza que golpea el mouse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top