ASP .NET_SessionId cook ie исчезает между запросами на указанном c сервере - PullRequest
0 голосов
/ 23 января 2020

Я имею разное поведение между тестовым сервером и dev-сервером - на моем dev-сервере все работает нормально, но на тестовом сервере ASP .NET_SessionId cook ie исчезает после потока событий и, следовательно, так же, как и серверы сессия. Тестирование проводилось в одном и том же браузере на одной машине, а базы кода практически идентичны. Единственным существенным отличием является то, что страницы обслуживаются из двух разных штук.

Поток страниц (все https), который вызывает это, таков:
Загрузка страницы из домена A, которая содержит iframe (сеанс cook ie существует на данный момент).
Домен B загружается в iframe.
Вторая страница из домена B загружается в iframe, запускаемый с первой страницы.
Вторая страница создает форму отправить сообщение обратно в домен А, где сессия Cook ie теперь отсутствует.

EDIT
Забыл сказать - мы используем SqlInMemoryProvider в качестве нашего состояния сеанса.

1 Ответ

0 голосов
/ 24 января 2020

Вы можете разделить состояние сеанса между двумя серверами, используя следующие способы:

1) Использование сеанса SQLServer:

В этом режиме состояния сеанса объекты сеанса сохраняются в SQL Сервер.

Преимущество использования этого метода заключается в том, что все данные в сеансе будут храниться вместе в другом месте, или вы можете сказать централизованное местоположение на SQL Сервере, чтобы заставить его работать, мы просто необходимо настроить SQLServer для хранения данных сеанса.

2) Использование сеанса StateServer:

В этом режиме состояния сеанса объекты сеанса хранятся на отдельном сервере, обработанном Windows Служба работает на этом сервере.

Преимущество использования этого метода заключается в том, что все данные в сеансе будут храниться вместе в другом месте. В этом случае сервер, обрабатываемый службой Windows, называется «aspnet_state»; это станет централизованным местом для данных сеанса. Чтобы заставить его работать, нам просто нужно настроить StateServer для хранения данных сеанса.

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

enter image description here

Кроме того, по умолчанию доступ к услуге невозможен. Чтобы включить эту опцию, необходимо установить для следующего раздела реестра значение 1: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ aspnet_state \ Parameters \ AllowRemoteConnection. Не забудьте перезапустить службу состояния asp. net после изменения ключа реестра.

Необходимо объявить параметры управления сеансом в узле system.web. Пример:

<sessionState mode="StateServer" stateConnectionString="tcpip=machinename:42424">
</sessionState>

Если вы хотите использовать тип сервера SQL, этот раздел может выглядеть следующим образом:

<sessionState mode="SQLServer" allowCustomSqlDatabase="true"sqlConnectionString="the connection string name to the server">
</sessionState>

Где SQL Строка подключения относится к имени строки подключения в разделе connectionStrings файла web.config, в котором содержатся сведения о таблице состояний. Сама строка подключения может принимать следующий формат:

<add name="ASPStateConnectionString" connectionString="Data Source=[DB machine name where state DB is stored];Initial Catalog=ASPState;User ID=[db admin user name];Password=[db admin password]"providerName="System.Data.SqlClient" />

нам также нужно добавить машину и ключ проверки в узле system.web, который может выглядеть примерно так:

<machineKey
validationKey="some long hashed value"
decryptionKey="another long hashed value"
validation="SHA1"/>

Значением по умолчанию для ключа проверки является AutoGenerate, который точно соответствует названию: ключ будет автоматически сгенерирован IIS. Режим генерации по умолчанию для ключа дешифрования - IsolateApps. Он генерирует уникальный ключ для каждого приложения, используя идентификатор приложения.

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

Для получения дополнительной информации вы можете обратиться по ссылкам ниже:

https://dotnetcodr.com/2013/07/01/web-farms-in-net-and-iis-part-5-session-state-management/

https://www.c-sharpcorner.com/UploadFile/25c78a/load-balancing-session-state-configuration/

...