ASP.NET: Как предотвратить открытие одного и того же сайта несколько раз параллельно? - PullRequest
2 голосов
/ 22 февраля 2012

Я новичок в ASP, и я столкнулся с наихудшим кошмаром для разработчиков: я получил огромный ASP.NET проект уволенного работника, и я должен внести в него некоторые изменения. Одним из изменений является предотвращение открытия одного и того же сайта несколько раз при одном входе в Active Directory (разные вкладки, браузеры и т. Д.) Как я заметил, приложение использует сессию. Любые идеи использовать сеанс для предотвращения нескольких экземпляров одного и того же сайта?

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

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

Это относительно простое решение для реализации, хотя уровень его защиты слабее, чем постоянное соединение.Хотя этого должно быть достаточно для нетехнических конечных пользователей - зависит от вашей «аудитории».Но даже для тех, кто знает о механизме, использование двух «экземпляров» приложения будет довольно сложным.

Сделайте это, если вам действительно нужно.Обычно я согласен с Марком, что веб-приложения не должны быть ограничены таким образом.Может быть, это требование от кого-то, кто может получить образование?

1 голос
/ 22 февраля 2012

Вам просто нужно создать постоянное соединение с каждой страницы.Если браузер перемещается с одной страницы на другую на одной вкладке, то у вас всегда будет одно постоянное соединение.Если вы получаете два параллельных постоянных соединения от одного пользователя, то пользователь открыл новую вкладку.

В нижнем колонтитуле главной страницы добавьте скрипт, который выполняет ajax-вызов сервера на странице, которая не заканчивает его ответ(Вроде длинный опрос).Если другой ajax-вызов поступает от того же пользователя, когда последний подключен, то это вторая вкладка.

Возможно, вы захотите проверить SignalR для постоянного подключения.Он должен иметь возможность переключения между веб-сокетами или длительным опросом в зависимости от возможностей браузера.

0 голосов
/ 22 февраля 2012

Вы не можете запретить загрузку URL-адреса в несколько браузеров или вкладок одновременно, поскольку это процесс, инициированный клиентом.

Вы можете реализовать постоянное соединение (как предлагает Хасан Хан), чтобы гарантировать, что одновременно может быть активным только одно окно браузера. Я бы добавил к этому, что когда открывается новое окно, вы можете предупредить пользователя, что у него уже есть открытое соединение. Если они решат использовать новое соединение, то вы отправите сообщение на старое соединение (другой браузер, вкладка и т. Д.), Которое заставит его очистить окно браузера для этого пользователя.

...