Вот идея.Используйте скрытое поле с GUID, которое будет случайным образом генерироваться сервером для каждой загрузки страницы.Когда запрос поступает на сервер, он проверяет, был ли поступивший GUID последний раз.Если он другой или пустой (пока сессия жива) - перенаправьте на какую-нибудь страницу, сообщив, что доступ запрещен (здесь нет нового GUID).Если это правильно, обслуживайте запрашиваемую страницу.Небольшая проблема заключается в том, что если кто-то закроет браузер и снова откроет его, ему / ей будет отказано в доступе при попытке снова использовать ваше приложение.Чтобы минимизировать это, вам нужно уменьшить время ожидания сеанса до 1 минуты и использовать AJAX asp: Timer, чтобы поддерживать сеанс в живых.Не забудьте исключить поддерживающие вызовы (и любые другие вызовы AJAX) из конвейера генерации / проверки GUID.Конечно, конец сессии сбрасывает процесс.Также было бы хорошо поощрять пользователей к правильному выходу из системы.
Это относительно простое решение для реализации, хотя уровень его защиты слабее, чем постоянное соединение.Хотя этого должно быть достаточно для нетехнических конечных пользователей - зависит от вашей «аудитории».Но даже для тех, кто знает о механизме, использование двух «экземпляров» приложения будет довольно сложным.
Сделайте это, если вам действительно нужно.Обычно я согласен с Марком, что веб-приложения не должны быть ограничены таким образом.Может быть, это требование от кого-то, кто может получить образование?