4

私はこれがほとんど同じ質問であることを知っています:ジョーによる質問

私はウェブアプリケーションを持っています。ウィンドウを閉じると (ブラウザで [X] をクリック)、ログアウト機能が呼び出されます。

問題は、Web アプリケーションを開いて、同じ Web アプリケーションを別のウィンドウ (新しいウィンドウまたは別のタブ) で開いたときです。そして、そのアプリケーションの開いているウィンドウがまだある場合でも、ログアウト機能を呼び出すウィンドウの 1 つを閉じます。

私がやりたいことは、閉じようとしている現在のウィンドウと同じ jsessionid を使用している他のウィンドウがあるかどうかを最初に確認することです。そのウィンドウを閉じると、同じ jsessionid を使用するウィンドウがない場合にのみ、ログアウト機能が呼び出されます。

4

1 に答える 1

3

もちろん、標準的な方法は、ブラウザを閉じるとログイン Cookie の有効期限が切れてログアウトすることですが、これはあなたのケースでは受け入れられない動作だと思いますか?

知る限り、別のブラウザ ウィンドウのコンテンツには、そのウィンドウが Javascript を使用して作成されていない限りアクセスできません。Javascript で onUnload ハンドラーを使用しているように聞こえるので、同じハンドラーを使用してウィンドウを追跡できます。ただし、多少のオーバーヘッドが発生し、完全な保証にはなりません (たとえば、ブラウザーのクラッシュや、ユーザーがアプリから離れた場合は処理されません)。

疑似コード: (負荷ハンドラは Javascript で処理され、セッションはサーバー側であるため、これはサーバー側コードとクライアント側 JavaScript の混合である必要があります)

function OnLoad() {
  if (document.referrer != "{identify your app here}")
    Session("BrowserWindowsOpen")++;
}

function OnUnLoad() {
  if ({your code for if window is closed})
  {
    Session("BrowserWindowsOpen")--;

    if (Session("BrowserWindowsOpen") == 0 )
      performLogOut();
  }
}
于 2012-10-02T11:05:13.320 に答える