Как указал Бенджамин, вы можете сделать это, придумав для каждого окна идентификатор, который вы затем сообщаете серверу при каждом запросе.Если вы хотите включить вариант использования нескольких окон, я думаю, что это наиболее разумный подход.
Я не думаю, что вам нужно опросить сервер через ajax, чтобы сделать это.Поскольку каждый запрос к серверу включает идентификатор окна, вы можете однозначно определить, с каким сеансом на стороне сервера связать запрос.Это будет означать, что ваш код на стороне сервера должен измениться, чтобы включить идентификатор окна как часть сеанса.
Однако такой подход имеет серьезные недостатки.Например, если пользователь закрывает и вкладку A, и вкладку B, а затем открывает новую вкладку C ... что происходит?С каким набором данных они должны повторно соединяться?
Подход, ограничивающий пользователя одной вкладкой, звучит довольно разумно, если вам нужно предотвратить смешивание состояния нескольких вкладок.
Вы можете сделать это через локальное хранилище, кстати.Если вы генерируете случайный идентификатор на клиенте и помещаете его в локальное хранилище с помощью вызова, подобного window.localStorage.setItem('window_id', <my_random_id_here>);
, тогда вы можете проверить это значение при загрузке страницы.Если значение существует при загрузке страницы, у вас есть довольно четкий индикатор того, что открыто хотя бы одно другое окно.Вы должны будете убедиться, что удалили это значение при выгрузке страницы, иначе мертвые сеансы могут вызвать ложные срабатывания.