Как я могу разделить сеанс между несколькими поддоменами в ASP.NET? - PullRequest
14 голосов
/ 08 ноября 2008

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

.
virginia.usa.com

до

newyork.usa.com

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

Ответы [ 5 ]

37 голосов
/ 18 января 2010

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

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

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

3 голосов
/ 22 мая 2014

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

При локальном запуске / отладке установка домена localhost не удастся, и он не удастся, даже если домен настроен правильно, поскольку Visual Studio по умолчанию использует localhost.

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

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

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

3 голосов
/ 08 ноября 2008

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

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

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

session.use_cookies = 1
session.use_only_cookies = 1
session.cookie_domain = .usa.com
0 голосов
/ 11 февраля 2014

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

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

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

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

0 голосов
/ 08 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...