Только некоторые инструкции Set-Cookie в HttpWebResponse соблюдаются для следующего HttpWebRequest - PullRequest
1 голос
/ 17 января 2011

Я вижу здесь очень странное поведение:

Я использую HttpWebRequest / HttpWebResponse с фиксированным объектом CookieContainer. .NET 4, Windows Server 2008 R2.

На одной машине (моей машине разработчика) я вижу ожидаемое поведение:

ответ, содержащий следующее:

Set-Cookie: m-aid=rm=false&un=systestseller&uid=68818c42-cb63-4d37-8daf-9e6e0130f72c&hp=true; expires=Fri, 31-Dec-9999 23:59:59 GMT; path=/; HttpOnly
Set-Cookie: m-pc=sim=Normal; expires=Fri, 31-Dec-9999 23:59:59 GMT; path=/; HttpOnly
Set-Cookie: m-f-auth=D8EC2D07743011DCC62EE52C968A649E419CDC3F476CC9EF04AE7D096E36CEE51DF2289E69C1D990809156CDD5DC6483DDFAAD101ED41E5890D4E6B7467E6F4F8705ED9BA7D358C9C878F5437CE9FC3FE47F8EB878E5CC8219B8767BD001AF7A; path=/; secure; HttpOnly

приводит к следующему запросу, содержащему

Cookie: arr=2ce1b36a3ef29aa4c45128f8c08ac603debf2063c752e843291a90fb8936899d; m-aid=rm=false&un=systestseller&uid=68818c42-cb63-4d37-8daf-9e6e0130f72c&hp=true; m-pc=sim=Normal; m-f-auth=D8EC2D07743011DCC62EE52C968A649E419CDC3F476CC9EF04AE7D096E36CEE51DF2289E69C1D990809156CDD5DC6483DDFAAD101ED41E5890D4E6B7467E6F4F8705ED9BA7D358C9C878F5437CE9FC3FE47F8EB878E5CC8219B8767BD001AF7A

однако на другой машине я вижу, что следующий запрос содержит только

Cookie: arr=2ce1b36a3ef29aa4c45128f8c08ac603debf2063c752e843291a90fb8936899d; 

Другими словами, создается только файл cookie arr, а не остальные.

При отладке кода HttpWebResponse фактически имеет только cookie arr в своей коллекции Cookies.

У кого-нибудь есть идеи? Это сводит меня с ума.

Ответы [ 2 ]

2 голосов
/ 19 июня 2013

Это на самом деле связано с часовыми поясами.

Предполагается, что срок действия файла cookie указан в UTC, это означает, что .NET настраивает параметр expiry для ваших текущих локальных настроек.Поскольку у всех отсутствующих файлов cookie истек срок действия DateTime.MaxValue, и ваш производственный сервер, скорее всего, живет в часовом поясе +1 или более, .NET добавляет смещение местного времени, получает недопустимую дату и отклоняет файл cookie как «нерелевантный ".

Хотя это, похоже, не является проблемой с .net 2.0 (обнаружил эту проблему после обновления фреймворка), очевидно, что он остается здесь, так как понижение кода не устраняет проблему.

0 голосов
/ 05 февраля 2011

Я предполагаю, что проблема связана с изменением URL-адресов между вашим сервером разработки и вашим рабочим сервером. Если имя хоста запроса № 1 отличается от имени хоста запроса № 2 (даже при перенаправлении с www.foo.com на foo.com), файлы cookie, полученные при вызове из запроса № 1, не будут отправляться на запрос № 2.

Не могли бы вы перечислить конкретные URL-адреса (для обоих запросов), которые успешно использовались на вашем сервере разработки, и URL-адреса, которые не работают в рабочей среде?

Обратите внимание, что один из ваших файлов cookie помечен как защищенный, что означает, что он не будет отправлен ни на какие запросы, кроме HTTPS. Это не вызовет проблемы, которую вы видите (потому что в вашем случае ни один из файлов cookie не сохраняется), но вызовет проблему, когда два из файлов cookie отправляются по HTTP-запросу, а третий - нет.

Кроме того, я заинтригован тем, что один файл cookie, arr, отправляется на сервер, предположительно по еще более раннему запросу. Чем этот предыдущий запрос отличается от вашего последующего запроса, который не выполняется?

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

...