複数ページのアプリケーションがあり、他のブラウザのタブまたは他のブラウザウィンドウ(IE8)でユーザーがalredyアプリケーションを開かれているかどうかを確認し、新しいウィンドウ/タブ)複数のタブまたはウィンドウでWebアプリケーションを開くことを避ける
その本当なら、私はJSP、JavaScriptとjQueryの
を使用する - のsessionStorage
を使用しないEDITED 私はまた、アイフレームとIE8のモーダルダイアログを使用します。
複数ページのアプリケーションがあり、他のブラウザのタブまたは他のブラウザウィンドウ(IE8)でユーザーがalredyアプリケーションを開かれているかどうかを確認し、新しいウィンドウ/タブ)複数のタブまたはウィンドウでWebアプリケーションを開くことを避ける
その本当なら、私はJSP、JavaScriptとjQueryの
を使用する - のsessionStorage
を使用しないEDITED 私はまた、アイフレームとIE8のモーダルダイアログを使用します。
接続を開いたままにするSignalRのような技術を使用する必要があります。次に、接続をpingして、そのユーザーが接続されているかどうかを確認し、既存の接続を終了する必要があります。その実装があまりにも難しい場合は、ログイン・テーブル(またはこれらのイベント用のストレージ・デバイス)を呼び出すタイマー・ループをアプリケーション/ページに追加し、新しいログインがある場合は独自のログアウト手順を呼び出すことができます。
1つのアプローチは、username vs session-id
を格納するアプリケーションスコープ内のマップ(メモリまたはユーザーカウントに基づいてデータベース)を維持することです。すべてのログイン時に、session
がすでに存在する場合は、このマップで参照します。username
存在する場合は、既存のセッションを無効にし、新しいsession-id
をマップに格納します。 [テストされていません]
ユーザーセッションIDまたはランダム生成IDをグローバル/ウィンドウ変数に渡すことができます。
window.state = 'SomeLoginIdString';
クライアントページが簡単にアクセスできる他の変数、好ましくはクライアントのデータストアに状態を保持します。
var loginAccessCurrentState = 'SomeLoginIdString';
open/switchページを使用すると両方を比較すると、falseの場合は404ページにリダイレクトできます。
loginAccessCurrentState === window.state
アイデアは、状態がデフォルトで定義されていない、ユーザーが新しいタブを開いた場合にのみ、ログインセッション中に状態を渡しです。
単一ページのアプリケーションでは、次の方法は、簡単に解決することができます
私はiframe(同じ起源)をモーダルダイアログで使用するとうまくいきますか?ウィンドウ変数はその中では未定義ですが、window.parent.stateはそうではないかもしれません... –