Я пытаюсь использовать встроенную обработку сеансов .NET для совместного использования сеансов в нескольких приложениях ASP.NET. Я не могу использовать индивидуальную реализацию сеанса.

  • У меня есть несколько веб-серверов, каждый со своим именем хоста, настроенных так, чтобы указывать на одну и ту же кодовую базу.
  • Я использую HttpModule, который вручную устанавливает имя приложения, поэтому, если запросы к разным серверам имеют одинаковый идентификатор сеанса, они будут использовать одни и те же данные сеанса.

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

ETA: Мы уже используем сервер состояний сеанса MS для обработки совместного использования сеанса между серверами в пуле. Этот вопрос конкретно касается совместного использования сеансов между приложениями, то есть приложением по адресу http://www.example.com и http://shopping.example.com должны иметь возможность совместно использовать одни и те же данные сеанса.

2
Nate Cook 7 Янв 2010 в 01:37
2
Почему вы не можете использовать индивидуальную реализацию сеанса?
 – 
SLaks
7 Янв 2010 в 01:43
Это часть более крупного проекта, и у меня нет возможности (доступ / разрешение / финансирование и т. Д.) Изменить способ реализации сессий. Все остальное в общей модели сеанса работает, за исключением возможности установить идентификатор сеанса до того, как будут запущены все события страницы.
 – 
Nate Cook
7 Янв 2010 в 20:31

2 ответа

Лучший ответ

Microsoft заявляет, что перешла на модель вне процесса для ASP. .NET Sessions, позволяя поддерживать совместное использование состояния сеанса из места хранения и совместно использовать его в фермах серверов.

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

Хранилище сеансов Windows State Server

Вы можете использовать настройку StateServer ...

Пример web.config

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>

Режим StateServer , в котором хранится сеанс состояние в отдельном процессе, называемом Государственная служба ASP.NET. Это гарантирует это состояние сеанса сохраняется, если Веб-приложение перезапускается, а также делает состояние сеанса доступным для несколько веб-серверов в веб-ферме

Хранилище сеансов SQL Server

Если у вас есть резервная база данных SQL Server, вы можете выбрать режим SQLServer

Режим SQLServer сохраняет состояние сеанса в база данных SQL Server. Используя этот режим гарантирует, что состояние сеанса сохраняется, если веб-приложение перезапущен, а также делает состояние сеанса доступно нескольким веб-серверам в Веб-ферма.

Пример web.config

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>

Есть и другие варианты. Эта статья MSDN содержит указания о том, как дополнительно настроить такие параметры ...

1
John K 7 Янв 2010 в 04:13
Спасибо - я добавил дополнительную информацию к вопросу, чтобы уточнить. Мы уже используем сервер состояний для обработки сеансов, но мне нужно иметь возможность совместно использовать доступ к этим сеансам между несколькими приложениями ASP.NET.
 – 
Nate Cook
7 Янв 2010 в 20:32

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

Сеанс не должен использоваться в разных приложениях.

0
Randolpho 7 Янв 2010 в 01:42