Можете ли вы поделиться переменными сеанса между двумя приложениями .net 2.0+? - PullRequest
3 голосов
/ 08 марта 2009

Мне сказали, что это работает, но ...

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

У меня есть пустое решение:
- внутри два веб-приложения .net 2.0
1) webapp1
2) webapp2

Я хочу, чтобы они использовали одни и те же данные сеанса.

Настройки моей страницы:

Приложение 1:

Session("value") = "this is the value"

Приложение 2:

If Not (Session("value") Is Nothing) Then
    value = Session("value").ToString()
End If

Мой мыслительный процесс:

1) зайти в сервисы, включить госслужбу asp.net
2) открыть веб-конфиги в обоих проектах: установить

< machineKey 
validationKey="BFE2909A81903BB303D738555FEBC0C63EB39636F6FEFBF8005936CBF5FEB88CE327BDBD56AD70749F502FF9D5DECF575C13FA2D17CA8870ED21AD935635D4CC" 
decryptionKey="2A86BF77049EBA3A2FA786325592D640D5ACD17AF8FFAC04" validation="SHA1" />
< sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" 
cookieless="false" timeout="20"/>

на обоих сайтах.
3) скомпилируйте и протестируйте сайт
4) разочароваться, потому что это не работает. Я никогда не вижу сеанс из второго веб-приложения.

Ответы [ 4 ]

5 голосов
/ 08 марта 2009

Вы не можете совместно использовать сессии между различными приложениями ASP.NET без некоторого пользовательского кода. В web.config вы использовали сеансы вне процесса, что означает, что данные больше не будут храниться в памяти, а в памяти выделенного компьютера. Это полезно для ферм серверов и использует ApplicationName, чтобы узнать, к какому приложению относится сеанс. Поэтому в основном ваши приложения должны иметь одно и то же имя, если вы хотите, чтобы они разделяли сеансы. Хотя есть некоторые грязные обходные пути .

1 голос
/ 10 марта 2009

Почему вы хотите поделиться сессиями между приложениями? Сеанс ASP.NET не предназначен для этого.

Предлагаемое вами решение использования одного и того же сервера состояний ASP.NET не работает, поскольку ваш пользователь просто получит 2 разных токена сеанса, даже если они одновременно используют ваши 2 приложения с одной и той же машины и одного и того же браузера. Вам нужно подумать о том, как работает Session, чтобы понять, почему это так.

С MSDN :

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

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

Если ваши приложения очень тесно связаны, например, пользователь использует оба одновременно или почти в одно и то же время, вы можете рассмотреть возможность объединения их в одно приложение ASP.NET. Вы можете развернуть их в разных виртуальных каталогах, чтобы поддерживать некоторую степень логического разделения, но использовать только одно приложение в IIS.

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

1 голос
/ 08 марта 2009

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

1 голос
/ 08 марта 2009

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

Например, если они оба размещены на одном и том же адресе и порте (или 'site' в iis), но в разных дочерних папках, то я думаю, что они должны совместно использовать сессию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...