Лучший способ обнаружить закрытие браузера / переход на другую страницу и выполнить выход из системы
-
23-08-2019 - |
Вопрос
Я пишу приложение в GWT, и мне нужно определить, когда пользователь переходит из моего приложения или когда он закрывает окно браузера (событие onUnload) и выполняет выход из системы (аннулирование сеанса и несколько других задач очистки).Действие выхода из системы выполняется сервлетом.
В настоящее время я делаю это, подключаясь к событию onUnload() и открывая новое окно, указывающее на сервлет выхода из системы.
Есть ли лучший способ сделать это?Любые другие предложения приветствуются.
Решение
Похоже, у GWT действительно есть мероприятие именно для этого.
Похоже, вам нужно реализовать Закрывающий манипулятор
Другие советы
Почему бы просто не создать очень недолговечный файл cookie сеанса, который сбрасывается при каждой загрузке страницы, а затем добавить файл cookie отслеживания.Когда пользователь возвращается, вы замечаете файл cookie отслеживания, но не файл cookie сеанса.Завершите сеанс и очистите все в этот момент.
Блокировщики всплывающих окон предотвратят очистку вашего сеанса, когда он блокирует открытие окна onUnload, потому что этим пользуются спамеры.
Вот как работает заключительное мероприятие:
Window.addWindowClosingHandler(new Window.ClosingHandler()
{
@Override
public void onWindowClosing(ClosingEvent event)
{
event.setMessage("Are you sure?");
}
});
Затем GWT дает пользователю возможность сказать "да" или "нет".Конечно, вы также можете добавить туда тест, чтобы узнать, есть ли у них какие-либо несохраненные данные или что вы хотите.Не устанавливая сообщение или устанавливая для него значение null, вы ничего не делаете.
Способ сделать это - использовать Window.addWindowClosingHandler
как сказали @Carnell и @BillLyons.Но я использую дополнительный метод, чтобы определить, был ли браузер закрыт или страница посещается снова (с помощью обновления или обратной навигации).
Ниже приведен служебный класс, который может вам помочь.Просто позвоните по приведенным ниже строкам в вашем onModuleLoad
чтобы проверить.
Пример использования:
@Override
public void onModuleLoad() {
if (BrowserCloseDetector.get().wasClosed()) {
GWT.log("Browser was closed.");
}
else {
GWT.log("Refreshing or returning from another page.");
}
}
Класс полезности:
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
public class BrowserCloseDetector {
private static final String COOKIE = "detector";
private static BrowserCloseDetector instance;
private BrowserCloseDetector() {
Window.addWindowClosingHandler(new Window.ClosingHandler() {
public void onWindowClosing(Window.ClosingEvent closingEvent) {
Cookies.setCookie(COOKIE, "");
}
});
}
public static BrowserCloseDetector get() {
return (instance == null) ? instance = new BrowserCloseDetector() : instance;
}
public boolean wasClosed() {
return Cookies.getCookie(COOKIE) == null;
}
}