Сессия сбрасывается при использовании субдомена - PullRequest
0 голосов
/ 08 марта 2010

Я пытаюсь использовать субдомены на своем веб-сайте ASP.NET, но я сталкиваюсь с несколькими проблемами при сбрасывании сеанса.

Я отредактировал свой файл hosts так, чтобы в нем были «localhost», «one.localhost» и «two.localhost». Я могу перейти на любой из этих URL-адресов и сделать то, что мне нужно, и войти в свою систему. Режим сеанса определяется в файле web.config следующим образом:

<sessionState cookieless="false" mode="SQLServer" timeout="300" 
        sqlConnectionString="Data Source=MyDatabase;user id=User1;password=pass"/>

Я использую SQLServer, так как веб-сайт будет работать как веб-ферма.

Я нахожу, что когда я нажимаю что-то, что вызывает обратную передачу, весь сеанс теряется, и создается новый идентификатор сеанса, когда это происходит, мой веб-сайт теперь является «локальным», а не зарегистрированным «one.localhost» например.

Кто-нибудь знает, что может быть причиной этого?

Приветствия

Ответы [ 2 ]

3 голосов
/ 08 марта 2010

Похоже, у вас возникла пара вопросов из вашего вопроса:

  1. Обмен информацией о сеансе между несколькими поддоменами.
  2. Войдите в несколько доменов.
  3. Пребывание на правильном домене во время обратной передачи.

Чтобы предоставить информацию о сеансе нескольким поддоменам, вам нужно записать cookie сеанса в правильный домен, в данном случае .example.com - см. Дополнительную информацию здесь: "Состояние сеанса ASP.NET, Файлы cookie и субдомены ".

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

<forms 
   name="name" 
   loginUrl="URL" 
   defaultUrl="URL"
   domain=".example.com">
</forms>

Вам нужно будет настроить это на всех сайтах.

Что касается того, почему вы перенаправляетесь на localhost, а не на one.localhost при обратной передаче, вам нужно взглянуть на источник, который был обработан (вы включаете некоторую базовую информацию href или ваша форма явно отправить обратно на локальный хост вместо one.localhost)? Хороший инструмент, чтобы увидеть, что делает браузер: Fiddler .

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

1 голос
/ 08 марта 2010

По сути, домен, который устанавливается в файле cookie, вошедшем в систему, относится к одному .localhost.

Есть несколько возможных взломов. см. например последний ответ на этот вопрос :

На странице входа в систему / запуска выполните следующее:

Response.Cookies["ASP.NET_SessionId"].Value = Session.SessionID;
Response.Cookies["ASP.NET_SessionId"].Domain = ".mydomain.com";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...