現在のユースケースは次のとおりです。
- ユーザーはブラウザタブを開き、アプリケーションページをロードしてログインします。
次に、ユーザーは2番目のブラウザータブを開き、アプリケーションページをロードし、すでにログインしています(ブラウザーには、すべてのタブまたはウィンドウで同じセッションCookieがあるため)。
また、ユーザーを制限して、2番目のタブを読み込んだときに、次のような警告メッセージが表示されるようにします。他の場所でこのサイトに既にログインしている場合は、そのウィンドウを使用してください。ウィンドウが開いていない場合は、ここでログアウトして、再度ログインします。
ほとんどのソリューションでは、セッションとともにアプリケーションのインスタンスのワンタイムトークンを保持する必要があります。アプリケーションが単一のページに読み込まれ、ユーザーにログインボックスが表示される場合、ユーザーがログインしたときに、ワンタイムトークンを送信し、それをjavascript変数に保存して、すべてのサーバーリクエストとともに送信できます。その後、ユーザーが新しいタブでアプリケーションをロードすると、ユーザーは初期データを要求し、サーバーはトークンが存在しないため、ログアウトするか、ウィンドウを閉じるか、すでにログインしているウィンドウに切り替える必要があることを示す応答を生成できます。
したがって、答えは基本的に、サーバー上のセッションにランダムな文字列を保存し、ログイン時にユーザーに提供し、すべてのリクエストにそれがないかどうかを確認して、ログアウトページにバウンスすることです。そして、WebクライアントのJavaScriptに、そのトークンを保存し、すべてのリクエストとともにサーバーに送信します。