2008-11-07 2 views
12

У меня есть приложение, где в процессе использования приложения, пользователь может щелкнуть значокКак я могу обмениваться сеансом между несколькими поддоменами в ASP.NET?

virginia.usa.com 

в

newyork.usa.com 

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

ответ

35

Вы помечено это с ASP.NET и IIS, поэтому я буду считать, что это ваше окружение. Убедитесь, что у вас есть это в вашем web.config:

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

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

+0

Спасибо большое Мэтт! Ранее мы использовали [это решение] (http://stackoverflow.com/a/2174338/177710), но он продолжал работу OutputCaching. Ваше решение заставляет наш OutputCache, наконец, работать: -D – Oliver 2012-01-24 22:41:42

0

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

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

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

0

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

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

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

+0

Проблема с сеансом cookie в браузере, который связан с доменом – 2009-03-18 15:48:42

3

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

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

Параметры вы ищете являются:

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

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

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

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

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

3

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

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

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

Моя проблема описана здесь: Setting ServiceStack Cookie Domain in Web.Config Causes Session Id to Change on Every Request

Надеется, что это помогает.

Смежные вопросы