Управление сессиями в gwt - PullRequest
0 голосов
/ 29 апреля 2011

Я работаю над приложением GWT-ext. В этом приложении я управлял сеансом на стороне клиента. Для этого я пишу ниже код:

Для управления сеансом: 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);
    }
}

Чтобы получить активность пользователя:

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

Этот код работает нормально, но мои проблемы: Этот код будет автоматически выходить из системы по мере истечения времени ожидания. Для моего кода я хочу, чтобы при щелчке или нажатии клавиши он выполнял выход из системы. Пример таков: если пользователь вошел в систему и время выхода из системы составляет 5 минут. Пользователь не выполняет никаких действий на экране, чем сейчас, согласно приведенному выше коду, он автоматически выйдет из системы по завершении 5 минут.

Теперь мое требование состоит в том, чтобы, если пользователь вошел в систему, и он ничего не делал в течение 5 минут. Он не должен делать никаких выходов из системы автоматически. Вместо выхода из системы по завершении 5 минут, если пользователь нажимает или нажимает клавишу вниз через 6 минут он должен выполнить процесс выхода из системы.

В основном процесс выхода из системы, когда таймер превышает указанное время, должен выполняться для пользовательской активности, а не автоматически.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2011

В таймере увеличивайте переменную на каждую секунду.И когда пользователь нажимает на любую кнопку через 5 минут или на 6-й минуте, чем проверить переменную счетчика, и если переменная больше 6, вы можете использовать Window.Location.reload (); для выхода из системы или перезагрузки ().

1 голос
/ 29 апреля 2011

Я думаю, что вы ищете это:

window.location.reload ();

Запускайте его каждые несколько секунд с помощью таймера, чтобы пользователь всегда был активным.

(Кстати, у меня это из Проблемы с закрытием окна в gwt -ext )

0 голосов
/ 29 апреля 2011

Установите обработчик событий JavaScript на невидимом элементе div, который охватывает всю область.Если он получает событие, отправьте запрос AJAX на сервер.

Затем сервер может делать все, что ему нужно.На стороне клиента вы можете дождаться ответа от AJAX-запроса и отобразить «Вы вышли из системы».

У этого подхода есть один недостаток: объекты, сохраненные в сеансе, тоже будут сохраняться живымидолго.Поэтому, даже если пользователь никогда не выйдет из системы и просто выйдет из системы (или его браузер выйдет из строя), сеанс останется живым.

Через пару дней накапливается так много мертвых сеансов, что ваш сервер рухнет.1007 *

Таким образом, лучшим решением является автоматический выход пользователя из системы, как вы уже и устанавливаете обработчик событий AJAX, как описано выше, для отображения сообщения, когда пользователь возвращается в браузер.

Таким образом, ваш сервер может очищать мертвые сессии, и пользователь получает сообщение, когда он может его прочитать (когда он находится перед экраном).

Обратите внимание, что вы не можете различить пользователяи уборщицы ударяют мышь.

...