Подтвердить что ты не робот

Как я могу обмениваться сеансом между несколькими поддоменами в ASP.NET?

У меня есть приложение, в котором при использовании приложения пользователь может щелкнуть

virginia.usa.com

к

newyork.usa.com

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

4b9b3361

Ответ 1

Вы отметили это с помощью ASP.NET и IIS, поэтому я буду считать, что это ваша среда. Убедитесь, что у вас есть это в файле web.config:

<httpCookies domain=".usa.com"/>

Если ваши 2 поддомены сопоставляются с одним и тем же приложением, то вы закончите. Однако, если они представляют собой разные приложения, вам нужно будет выполнить дополнительную работу, например, используя хранилище сеансов на базе SQL Server (и взломать хранимые процедуры, чтобы убедиться, что все приложения используют одни и те же данные сеанса) или HttpModule для перехвата имени приложения, поскольку даже с использованием общих файлов cookie и одного и того же машинного ключа 2 приложения будут по-прежнему использовать 2 разных хранилища для своих данных сеанса.

Ответ 2

Отслеживайте собственные сеансы и используйте cookie с соответствующей настройкой домена, т.е. .usa.com.

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

Настройки, которые вы ищете:

session.use_cookies = 1
session.use_only_cookies = 1
session.cookie_domain = .usa.com

Ответ 3

Недавно я прошел через это и усердно учился. Localhost фактически считается TLD. Домены cookie требуют, по крайней мере, второго уровня домена - test.com. Если вы хотите, чтобы файлы cookie работали для домена и всех его поддоменов, префикс с символом '.' -.test.com.

При запуске/отладке локально установка домена локального хоста завершится неудачно, и он завершится неудачно, даже если домен настроен должным образом, поскольку визуальная студия по умолчанию использует localhost.

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

Моя проблема документирована здесь: Настройка домена cookie ServiceStack в Web.Config вызывает идентификацию идентификатора сеанса для каждого запроса

Надеюсь, что это поможет.

Ответ 4

Если вы используете PHP, один взломанный способ состоит в том, чтобы немного включить script (или два), чтобы сделать следующее:

1 Сериализовать массив $_SESSION 2 Передайте эту строку как скрытый ввод, сделав все ваши ссылки на эти кнопки в отдельных формах, используя POST. 3 Также включите логический скрытый ввод, чтобы ваш script знал, нужно ли ему использовать текущий сеанс или несериализовать $_POST ['session'] 4 Разверните это на своем сайте, вызывая, где это целесообразно,

Я бы этого не сделал, если на самом деле был санкционированный способ передачи сеанса. Надеюсь, вы хотя бы рассмотрели использование файлов cookie.

Ответ 5

Я не думаю, что разные субдомены сами по себе заставляют разные сеансы. Оба URL-адреса, которые вы указали в качестве примеров, могут указывать на одно и то же приложение в IIS.

Звучит так, как будто у вас разные серверы или, по крайней мере, разные сайты в IIS для каждого поддомена. Лучший способ сохранить постоянное состояние, как это, находится в центральной базе данных. Я считаю, что служба профиля в ASP.NET очень полезна для этой цели.

Надеюсь, что это поможет.

Ответ 6

Ответ Matt - это, безусловно, путь, если у вас есть несколько субдоменов, указывающих на одно и то же приложение IIS (это именно та ситуация, которая у меня есть сейчас, с использованием подстановочного DNS, а затем выполнение поддомена "sniffing" на принимающей стороне).

Однако я хотел добавить что-то, что я испытал, если кто-то найдет, что это не работает для них. Установка линии httpCookies сама по себе не сделала этого для меня, мне пришлось добавить запись machineKey в файл web.config:

machineKey decryptionKey = "12... D1" validationKey = "D7..8B"

Особенно странно, так как я не в настройке веб-фермы (если только AWS/EC2 не действует как таковой). Как только я это сделал, он работал как чемпион.