Почему пропущено одно печенье?
Я удаляю страницу, которая является результатом перенаправления: сначала я захожу на страницу 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=/
при настройке куки.