Почему пропущено одно печенье?

Я удаляю страницу, которая является результатом перенаправления: сначала я захожу на страницу page1, затем она перенаправляет на страницу page2 через http-equiv="refresh", Я пересматриваю страницу2. Содержимое на странице 2 основано на некоторых наборах файлов cookie страницы. Я вижу, что page1 возвращает 2 куки, но когда я запрашиваю страницу 2 (отправляю CookieContainer, один файл cookie отсутствует. Что не так в моем коде?

Спасибо:

Во-первых: я создаю CookieContainer и HttpWebRequest и запрос на страницу 1.

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(eQuery);
req.AllowAutoRedirect = true; // but it doesn't autoredirects the meta-refresh
req.CookieContainer = cookiesContainer;

Это результат, который я получаю от посещения страницы1.

HTTP/1.1 200 OK
Date: Tue, 12 Apr 2011 19:14:06 GMT
Server: (...)
Set-Cookie: NAME1=VALUE1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: NAME2=VALUE2; expires=Wed, 13-Apr-2011 19:14:06 GMT
Content-Length: 174
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
(...)

Пока все в порядке, я получаю два cookie-файла и получаю два объекта cookie в контейнере.

Затем я анализирую значение "содержимого" meta http-equiv для следующего URL. И запросите его, используя аналогичный код и используя тот же контейнер. Но отправляется только один файл cookie. Вот HTTP отправлено:

GET DETECTED_URL_IN_HTTP_EQUIV_REFRESH HTTP/1.1
User-Agent: (...)
Host: example.com
Cookie: NAME1=VALUE1

Как видите, файл cookie NAME2 отсутствует. Почему это происходит? Есть ли что-то связанное между двумя cookie-файлами (у одного есть путь, а у другого - дата окончания срока действия) Любая идея, как я могу передать два куки?

PS: у меня нет доступа к странице 1, поэтому я не могу указать путь или срок действия файлов cookie. Я ломаю эти страницы.

Спасибо.

1 ответ

Решение

Если вы не укажете путь в своем файле cookie, по умолчанию будет указан путь, по которому он был запрошен. Так что если вы получили cookie по этому запросу без объявления пути:

http://contoso.com/subfolder/test.aspx

Браузер будет отправлять этот cookie только для дополнительных запросов в /subfolder/ каталог. Чтобы браузер отправил его обратно по всем путям, которые вам нужно включить path=/ при настройке куки.

Другие вопросы по тегам