2017-01-20 11 views
0

複数ページのアプリケーションがあり、他のブラウザのタブまたは他のブラウザウィンドウ(IE8)でユーザーがalredyアプリケーションを開かれているかどうかを確認し、新しいウィンドウ/タブ)複数のタブまたはウィンドウでWebアプリケーションを開くことを避ける

その本当なら、私はJSP、JavaScriptとjQueryの

を使用する - のsessionStorage

を使用しないEDITED 私はまた、アイフレームとIE8のモーダルダイアログを使用します。

答えて

0

接続を開いたままにするSignalRのような技術を使用する必要があります。次に、接続をpingして、そのユーザーが接続されているかどうかを確認し、既存の接続を終了する必要があります。その実装があまりにも難しい場合は、ログイン・テーブル(またはこれらのイベント用のストレージ・デバイス)を呼び出すタイマー・ループをアプリケーション/ページに追加し、新しいログインがある場合は独自のログアウト手順を呼び出すことができます。

0

1つのアプローチは、username vs session-idを格納するアプリケーションスコープ内のマップ(メモリまたはユーザーカウントに基づいてデータベース)を維持することです。すべてのログイン時に、sessionがすでに存在する場合は、このマップで参照します。username存在する場合は、既存のセッションを無効にし、新しいsession-idをマップに格納します。 [テストされていません]

0

ユーザーセッションIDまたはランダム生成IDをグローバル/ウィンドウ変数に渡すことができます。

window.state = 'SomeLoginIdString'; 

クライアントページが簡単にアクセスできる他の変数、好ましくはクライアントのデータストアに状態を保持します。

var loginAccessCurrentState = 'SomeLoginIdString'; 

open/switchページを使用すると両方を比較すると、falseの場合は404ページにリダイレクトできます。

loginAccessCurrentState === window.state 

アイデアは、状態がデフォルトで定義されていない、ユーザーが新しいタブを開いた場合にのみ、ログインセッション中に状態を渡しです。

+0

私はiframe(同じ起源)をモーダルダイアログで使用するとうまくいきますか?ウィンドウ変数はその中では未定義ですが、window.parent.stateはそうではないかもしれません... –

0

単一ページのアプリケーションでは、次の方法は、簡単に解決することができます

  1. 追加呼び出しごとのAjaxのセッションにし、GUI
  2. に格納し、エントリーページ上のランダムなIDを作成します。追加のHTTPヘッダーとしてのリクエストへのランダムID
  3. IDが指定されたヘッダーとセッションの間で一致しない場合、アプリケーションは別のタブ/ウィンドウで開かれ、この呼び出しは「古い」タブから行われます
  4. サーバのGUIをGUIに導かなければならないck /影響を受けたタブ内で閉じます
関連する問題