2010-11-19 1 views
1

Я работаю над обновлением на одном из наших сайтов. Эта версия будет иметь уникальное поведение, основанное на имени хоста в запросе. Чтобы проверить это поведение, я изменил файл хоста для компьютеров, добавив записи, которые указывают на мой компьютер.Почему записи в файле хоста создают новые SessionID для каждого запроса

127.0.0.1  newhostname.sample.com 
127.0.0.1  oldhostname.sample.com 

Все, казалось, работает нормально, пока я не начал работать с объектом Session. Я обнаружил, что после каждого запроса все мои переменные сеанса были потеряны. Дальнейшее исследование показало, что каждый ответ с сервера содержал новый SessionID.

Почему это?

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

+0

Вы утверждаете, что newhostname.sample.com и oldhostname.sample.com являются заголовками хостов на одном сайте? – Kev

+0

Да, как на моей коробке разработки, так и в производстве. – PhillFox

ответ

0

Я не могу это объяснить, но у меня есть приемлемая работа над моей собственной проблемой.

Вместо использования 127.0.0.1 в файле Host я использую свой локальный IP-адрес. Поэтому запросы к именам в моем файле хоста обрабатываются локально, и я сохраняю один и тот же SessionID по всему сайту.

Если кто-нибудь еще может объяснить, я был бы рад узнать, что делает IIS (или asp.net) при использовании 127.0.0.1.

0

Я думаю, что это связано с доменом сайта и переданным cookie сеанса - браузер не передает cookie, отправленный ему с oldhostname.sample.com, на newhostname.sample.com.

Чтобы исправить это, вам необходимо установить домен отправляемого файла cookie сеанса. Этот вопрос должен показать, как это сделать - ASP.NET Session Cookies - specifying the base domain.

В качестве альтернативы вы можете изучить использование сеансов без файлов cookie. http://msdn.microsoft.com/en-us/library/aa479314.aspx

+0

Спасибо, Джон. Возможно, мой вопрос был недостаточно ясен из-за нескольких строк в образце хоста, но я не переходил от одного имени к другому. Все запросы были либо на oldhostname.sample.com, либо на newhostname.sample.com. В производстве мы используем StateServer для нашего SessionState, и это локальная проблема, поэтому без файлов cookie не вариант, к которому я могу переключиться. Я мог бы внести изменения для целей тестирования, но это не отвечает на главный вопрос: почему SessionId был уволен? Тем не менее, я попробую провести тестирование с указанным доменом. – PhillFox