2008-11-06 5 views
1

Есть 3 веб-приложения.проблема с аутентификацией или ошибка

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

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

1, Там является связь с целевым = «_blank» свойство на странице сайта A и ссылку на защищенную папку сайта B;

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

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

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

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

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

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

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

9, Нажмите на ссылку на сайт С другой стороны, Вы можете найти себя уже прошел проверку подлинности на сайте C.

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

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

ответ

1

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

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

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

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

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

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

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

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

+0

Спасибо, Энтони. Но теперь я хочу избежать этой проблемы. Как я могу это сделать? Установите тайм-аут cookie или другие подходы? Еще раз большое спасибо. – Shiny 2008-11-06 08:39:24

0

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

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

Смежные вопросы