다른 페이지로 브라우저 폐쇄/탐색을 감지하고 로그 아웃하는 가장 좋은 방법

StackOverflow https://stackoverflow.com/questions/888483

문제

GWT에 응용 프로그램을 작성하고 있으며 사용자가 응용 프로그램에서 멀어 지거나 브라우저 창을 닫을 때 (OnUnload 이벤트)를 닫고 로그 아웃 (세션 무효화 및 기타 정리 작업이 거의 없음)을 감지해야합니다. 로그 아웃 조치는 서블릿에 의해 수행됩니다.

현재 OnUnload () 이벤트에 연결하고 로그 아웃 서블릿을 가리키는 새 창을 열어서이 작업을 수행하고 있습니다.

더 좋은 방법이 있습니까? 다른 제안을 환영합니다.

도움이 되었습니까?

해결책

GWT가 정확히 이벤트가있는 것 같습니다.

ClosingEvent.

구현 해야하는 것 같습니다 닫는 핸들러

다른 팁

각 페이지로드에 재설정되는 매우 짧은 살아있는 세션 쿠키를 만들고 추적 쿠키를 추가하십시오. 사용자가 반환하면 추적 쿠키가 있지만 세션 쿠키는 없습니다. 세션을 만료하고 그 시점에서 모든 것을 정리하십시오.

팝업 차단제는 스패머가 사용하는 것이기 때문에 OnOnload 창을 열면 세션이 정리되는 것을 방지합니다.

이것이 마감 이벤트가 작동하는 방식입니다.

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;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top