Назад | Перейти на главную страницу

Использование сеанса между доменами в ASP.NET 2.0

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

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

Итак, есть ли способ включить сеанс между несколькими доменами? Или есть другое решение, о котором мы не думали?

Примечание. Мы используем не Active Directory для аутентификации, а аутентификацию БД.

Насколько я знаю, это невозможно.

Однажды при переходе с "классического" asp на .net у нас возникла более или менее та же проблема. «Классические» страницы asp не разделяют сеанс с новыми страницами asp.net.

Мы сделали страницу, которая «зарегистрировала» пользователя в обоих «доменах». Когда пользователь обращается к странице и страница проверяет, что он не авторизован, новая страница спрашивает у старой, была ли она на ней.

Конечно, у этого метода есть большая проблема безопасности, и мы использовали его только в период миграции. Пытаясь сделать его более надежным, мы проверили, например, реферера страницы.

Просто чтобы помочь вам: другая проблема с подходом к БД заключается в том, что представьте, что пользователь закрывает браузер, не нажимая кнопку закрытия / выхода. «Сеанс» будет активен в БД. Конечно, у вас есть способы справиться с этим, но это усложнит.

Я бы использовал базу данных для совместного использования сеанса между доменами или различными технологиями, такими как классический ASP, PHP или asp.net.

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

Более подробную информацию об этом подходе можно найти на "Улучшенное состояние сеанса Asp.net"