Как записывать XML-тег "sessionState" в файле web.Config

сценарии,
Как поместить идентификатор сессии в параметр GET, а не в URL?,
https://ru.wikipedia.org/wiki/Web.config
ASP.NET state service
Что такое session-state data? Для чего используется? Это то же самое, что session-state или нет?

https://msdn.microsoft.com/library/h6bb9cz9(v=vs.100).aspx

configuration Element (General Settings Schema)
    system.web Element (ASP.NET Settings Schema)
        sessionState Element (ASP.NET Settings Schema)

Что это за схемы такие - General Settings и ASP .NET Settings?
Что вообще такое схемы? (видимо, это схемы, описывающие формат XML)


В версии 2.0

<sessionState
    mode="[Off|InProc|StateServer|SQLServer|Custom]"
    timeout="number of minutes"
    cookieName="session identifier cookie name"
    cookieless="[true|false|AutoDetect|UseCookies|UseUri|UseDeviceProfile]"
    regenerateExpiredSessionId="[True|False]"
    sessionIDManagerType="session manager type"
    sqlConnectionString="sql connection string"
    sqlCommandTimeout="number of seconds"
    allowCustomSqlDatabase="[True|False]"
    useHostingIdentity="[True|False]"
    stateConnectionString="tcpip=server:port"
    stateNetworkTimeout="number of seconds"
    customProvider="custom provider name"
    compressionEnabled="[True|False]"
    sqlConnectionRetryInterval="number of seconds">
    <providers>...</providers>
</sessionState>

В версии 1.1

<sessionState mode="Off|InProc|StateServer|SQLServer"
    cookieless="true|false"
    timeout="number of minutes"
    stateConnectionString="tcpip=server:port"
    sqlConnectionString="sql connection string"
    stateNetworkTimeout="number of seconds"/>

Зачем нужен каждый из атрибутов? Ну, наверное есть типовые сценарии использования, для разных сценариев использования нужны разные атрибуты, я так думаю

cookieless

Ставим sessionState в значение cookieless="UseUri"
и что это даёт? к чему это приводит? Какие эффекты возникают? Каким кодом это обрабатывается и в каких местах для каких целей используется?

sessionIDManagerType

значение по умолчанию - это пустая строка. а если не по-умолчанию,
то нужно вписать "fully qualified type of the session ID Manager".
что такое "session ID Manager" и зачем он нужен?
как формируется "fully qualified type name"?

regenerateExpiredSessionId

Specifies whether the session ID will be reissued when an expired session ID is specified by the client.
А что конкретно означает "will be reissued"? будет загружена старая сессия, но для неё будет сгенерирован новый идентификатор?
будет создана новая сессия, но для неё будет использован старый идентификатор?
будет создана новая сессия и для неё будет сгенерирован новый идентификатор (а разве он и так не был бы сгенерирован?)

By default, session IDs are reissued only for the cookieless mode when regenerateExpiredSessionId is enabled.
For more information, see IsCookieless.
Optional Boolean attribute. The default is true. This attribute is new in the .NET Framework version 2.0.
то что нужно задать (поменять значения по-умолчанию) - написано выше. А ниже - другое разное.

mode

Optional SessionStateMode attribute.

Specifies where to store session state values.
For more information, see Session-State Modes.
The mode attribute can be one of the following possible values. The default is the InProc value.

ValueDescription
CustomSession state is using a custom data store to store session-state information.
InProcSession state is in process with an ASP.NET worker process.
OffSession state is disabled.
SQLServerSession state is using an out-of-process SQL Server database to store state information.
StateServerSession state is using the out-of-process ASP.NET state service to store state information.

Ну ок, значение по умолчанию InProc - зачем вообще записывать состоянии сессии на сервер сессий?
разве это так плохо, оставлять worker-процесс работающим на время сессии? Или на выгрузке worker-процесса много экономится?

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

In the .NET Framework version 1.1, if the mode attribute was set to SQLServer, and client impersonation was in effect, ASP.NET connected to the computer running SQL Server using the client credentials from the ASP.NET client impersonation.

Начиная с .NET Framework версии 2.0, useHostingIdentity = true по-умолчанию
If true, ASP.NET connects to the session-state store using one of the following process credentials:
  • The hosting process, which is ASPNET for Microsoft Internet Information Services (IIS) versions 5 and 5.1 or NETWORK SERVICE for Microsoft Windows Server 2003.

  • The application impersonation identity, which is when the following configuration is used:
    <identity impersonate="true" userName="domain\username" password="secure password" />


timeout
Specifies the number of minutes a session can be idle before it is abandoned.
Что значит "abandoned"? Что при этом происходит с session data, если они удаляются, то кем?
The timeout attribute cannot be set to a value that is greater than 525,600 minutes (1 year) for the in-process and state-server modes.
Optional TimeSpan attribute. The default is 20 minutes.
The session timeout configuration setting applies only to ASP.NET pages. Changing the session timeout value does not affect the session time-out for ASP pages. Similarly, changing the session time-out for ASP pages does not affect the session time-out for ASP.NET pages.

customProvider - String. Optional attribute. Empty string ("") is the default. Attribute is new in the .NET Framework version 2.0.
Specifies the name of a custom session-state provider to use for storing and retrieving session-state data.
The provider is specified in the providers element.
The provider is used only when the session-state mode is set to the Custom value.
For more information, see Session-State Modes.

По-умолчанию используется имя базы данных ASPState. Значение атрибута allowCustomSqlDatabase = false по-умолчанию.
Начиная с .NET Framework version 2.0, чтобы использовать своё имя базы данных, надо задать allowCustomSqlDatabase = true и добавить название БД в параметр sqlConnectionString
названия параметров в строке соединения - initial catalog или database

partitionResolverType - partition session-state data across multiple backend nodes when in SQL or state-server mode.