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

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

virginia.usa.com

to

newyork.usa.com

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


person marclar    schedule 07.11.2008    source источник


Ответы (5)


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

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

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

person Matt Connolly    schedule 18.01.2010
comment
Большое спасибо, Мэтт! Мы уже использовали это решение раньше, но оно не позволяло работать OutputCaching. Ваше решение заставляет наш OutputCache наконец-то работать :-D - person Oliver; 25.01.2012
comment
Я пробовал это на своем локальном хосте (с поддоменом в моем файле hosts), и это не сработало. Я могу подтянуть поддомен в порядке, но переход от одного к другому приводит к потере сеанса и необходимости повторного входа пользователя в систему. Любые идеи? - person Marc; 22.09.2012
comment
Я думаю, что у этой ссылки есть хорошее решение support.microsoft.com/kb/2527105 (Как разделять состояние сеанса между поддоменами) от службы поддержки Microsoft, это зависит от модуля HTTP, поэтому вам не нужно обновлять готовую базу данных SQL сеанса. - person Tarek El-Mallah; 08.05.2014
comment
домен web.config virginia.usa.com или домен web.config newyork.usa.com? Помогите, пожалуйста - person HOÀNG LONG; 08.12.2018

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

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

Вам нужны следующие настройки:

session.use_cookies = 1
session.use_only_cookies = 1
session.cookie_domain = .usa.com
person Matthew Scharley    schedule 07.11.2008

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

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

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

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

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

person vm0112    schedule 22.05.2014

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

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

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

person Robert Elwell    schedule 07.11.2008

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

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

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

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

person Chris    schedule 10.02.2014