проблема или ошибка аутентификации - PullRequest
1 голос
/ 06 ноября 2008

Есть 3 веб-приложения.

Сайт A и B являются веб-приложением ASP.NET с конфигурациями FormsAuthentications, и на сайте B есть защищенная папка, которая также правильно настроена в файле web.config. Сайт C - это классическая сеть ASP, которая сохраняет статус аутентификации в Session.

Теперь, пожалуйста, рассмотрите следующие шаги:

1, на странице сайта A есть ссылка со свойством target = "_ blank" и ссылкой на защищенную папку сайта B;

2, кликнув по этой ссылке, вы должны открыть сайт B в новом окне браузера и перенаправить на страницу входа;

3, войдите под своими учетными данными, затем перенаправьте на защищенную страницу в обычном режиме, теперь вы, конечно, можете просматривать эту страницу сайта B;

4, теперь закройте окно браузера, в котором отображается защищенная страница сайта B, вы можете нажать кнопку закрытия браузера или нажать Alt + F4;

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

6, есть еще одна ссылка с целевым = "_ blank" на странице сайта A и ссылкой на защищенную страницу сайта C, сайт C является сайтом ASP;

7, сначала откройте защищенную страницу сайта C, для входа требуется точно;

8, зайдя на сайт C и вы можете просмотреть защищенную страницу, конечно, затем закрыть браузер;

9, Снова нажмите на ссылку на сайт C, вы уже можете пройти аутентификацию на сайте C.

К сожалению. уже 10 шагов, я думаю, что это скучно, но они действительно запутывают меня в течение нескольких дней.

Кто-нибудь знает об этой проблеме? Большое спасибо.

Ответы [ 2 ]

1 голос
/ 06 ноября 2008

Как ASP, так и ASP.NET используют файл cookie сеанса, который хранится в памяти процесса браузера. Открытие нового окна браузера по ссылке не запускает новый процесс, а просто открывает новое окно, принадлежащее тому же процессу, что и исходное окно.

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

Редактировать : Вопрос поднимается в комментарии: «Как этого избежать». Лучший ответ будет таким: не избегайте этого, воспринимайте это как нормальную работу и избавьте себя от множества неприятностей.

То, что вы запрашиваете, это средство определения того, что в настоящее время нет окон, отображающих контент для конкретного приложения. Это действительно трудно достичь. Даже если у вас есть только одно окно в приложении (что не может быть гарантировано), вам нужно будет убедиться, что все страницы перехватили событие onunload в окне, чтобы сообщить серверу, что приложение выходит из системы.

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

Обычно сеанс в ASP помечается как «вошедший в систему» ​​путем хранения какого-либо токена в объекте сеанса. Страницы, входящие в состав этого приложения, будут проверять этот токен и, если его не будет, перенаправлять на страницу входа.

Для выхода из системы значение сеанса удаляется, а клиент перенаправляется на страницу входа.

В ASP.NET FormsAuthentication имеет методы SignOut и RedirectToLoginPage, а проверка подлинности с помощью форм автоматически выполняет перенаправление на страницу входа в систему.

0 голосов
/ 22 января 2011

Используйте session.abandoned для события window.close, например.

Создать функцию, которая будет загружена в заголовок и перехватить событие window.close. Не забудьте проверить, что предыдущая страница принадлежит тому же домену / IP. Потому что ваш пользователь может забыть выйти из системы и перейти на другой сайт, а затем нажать кнопку "Назад" ...

...