Как @ntziolis упомянул в своем ответе, так и @Aristos упомянул в своем комментарии, сеанс основан на комбинации имени приложения и файла cookie сеанса. Вы можете заставить его работать (как я только что сделал), если имя приложения совпадает, а значение cookie сеанса совпадает.
Чтобы имя приложения было таким же, я использовал это решение от SO, использующего отражение:
protected void Application_Start(object sender, EventArgs e)
{
string applicationName = "MySiteName";
// Change the Application Name in runtime.
FieldInfo runtimeInfo = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
HttpRuntime theRuntime = (HttpRuntime)runtimeInfo.GetValue(null);
FieldInfo appNameInfo = typeof(HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
appNameInfo.SetValue(theRuntime, applicationName);
}
Я добавил это в оба файла Global.asax (каждого из моих сайтов).
Чтобы файл cookie сеанса был таким же, файл cookie не может быть недействительным из-за пути или домена. Если у вас есть два виртуальных каталога на одном и том же сайте, вы можете решить проблему пути и домена cookie.
Если вы не добавили явный код в файл web.config, по умолчанию имя файла cookie сеанса и ключ компьютера также будут одинаковыми. Если нет, вам нужно убедиться, что ваш <machineKey>
явно установлен и одинаков для двух приложений, а значение для cookieName
в <sessionState>
явно установлено и одинаково для двух приложений:
<configuration>
<system.web>
<machineKey validationKey="77D2713C3E6C46160F278B7F4787A341A8E9010C3C228F8E9522685050F5204ECA0F2BA2169C4F29C1ADD8C3B99E7143A21272A59373BFBEF21C6677D0FF293C" decryptionKey="286F0EA94D5DA2E697C8C148934EF885A6513AD91C044EDFE7DC45027653B830" validation="SHA1" decryption="AES" />
<sessionState cookieName="mySessionCookie" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20" />
</system.web>
</configuration>
Это сработало для меня - мне удалось раскрутить веб-сайт для проверки концепции.