2012-06-30 2 views
7

Я пытаюсь помочь другу - у них довольно большое веб-приложение (ASP.NET 4.0, Visual Basic), которое имеет несколько подпапок, которые все действуют как квази- приложений (но это всего лишь подпапки основного приложения). Это приложение будет разделено на несколько независимых веб-приложений, потому что в его нынешнем виде его трудно поддерживать и развивать.Передача данных сеанса между веб-приложениями ASP.NET

Проблема заключается в том, что текущее монолитное приложение использует несколько переменных сеанса для таких вещей, как информация пользователя (после входа в систему и т. Д.). Интересно, есть ли простой способ безопасно использовать эту информацию среди будущих нескольких веб-приложений (которые очевидно, будут иметь самостоятельные сессии). Состояние сеанса хранится в SQL Server. Пользователями текущего веб-приложения являются все внешние пользователи, и не все пользователи имеют доступ ко всем «под-приложениям».

Я ищу несколько советов об этих двух вещах:

1. я уже сделал некоторые поиски и нашел единый вход на - это, кажется, решить проблему аутентификации между этими приложениями, но я m незнаком с ним, и я не понимаю, как информация аутентификации удаляется, если истекает «сеанс», поскольку разные веб-приложения будут иметь разные сеансы. Можно ли вывести пользователя из всех веб-приложений после окончания сеанса в одном из них?

2. Я подозреваю (но не уверен), что могут быть другие данные сеанса поверх информации аутентификации, которая может понадобиться для совместного использования после разделения. Какой был бы лучший способ сделать это (снова надежно и надежно)?

Я нашел this article about passing IDs (к записям базы данных, которые будут хранить общие данные) и задаться вопросом, хорошо ли это.

Все советы будут оценены.

PS: Я нашел несколько потоков здесь, на этом, но я не думаю, что кто-либо из них ответил на эти конкретные вопросы. Самым полезным я нашел этот один:

Sharing data between ASP.NET applications

+0

Все приложения находятся на одном домене или разные? – MMK

+1

Я думаю, что все они будут в одном домене. В настоящее время это всего лишь одно приложение, и я считаю, что они планируют раскол в том же домене. – xxbbcc

+0

Я тоже ищу совместное использование идентификатора сеанса между приложением в том же домене. –

ответ

11

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

StateServer использует службы Windows (ASP.NET Государственная служба), которая обрабатывает сеансы в памяти. Это использует MachineKey, AppDomainAppID, а также SessionID для уникальной идентификации приложения.

  • Установить тот же MachineKey в web.config, чтобы он был таким же для всех приложений под сайтом.
  • Добавить код в Global.asax Init(), чтобы установить AppDomainAppID одинаково для всех приложений.
  • Внедрение ISessionIDManager и возврат пользовательского идентификатора сеанса для повторного использования в под-приложениях.

Следующие ссылки предоставил информацию для фактической реализации я сделал:

+0

Привет, будет ли это решение работать, когда у меня есть один веб-сайт ASP.NET 4.5 и другой веб-сайт ASP.NET 5/MVC 6? Я отчаянно нуждаюсь в том же идентификаторе сеанса на новом веб-сайте, который я добавляю. Это поможет мне запросить множество подробностей, доступных в базе данных. –

+0

@Wayofhope Я не знаю ответа (я не использовал MVC 5/6), но я бы предположил, что это сработает (хотя я могу ошибаться). Я предлагаю вам попробовать. Если это сработает, я был бы признателен, если бы вы оставили комментарий для будущих читателей. – xxbbcc

2

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