Java Servlet API 2.5 Cookie.getDomain() всегда возвращает null

У меня возникла проблема с использованием класса Cookie API Servlet 2.5 на Tomcat. Я извлекаю список файлов cookie из объекта HttpServletRequest и перебираю их следующим образом:

Cookie[] cookies = request.getCookies();

for(Cookie cookie : cookies) {
    System.out.println("Name=" + cookie.getName() + " Domain=" + cookie.getDomain());
}

Однако для каждого файла cookie в запросе домен имеет значение null. Почему это? Причина, по которой я спрашиваю, заключается в том, что у меня есть файл cookie с одним и тем же именем в двух разных доменах, и я хочу иметь возможность различать их на основе домена. Чтобы прояснить ситуацию, мои файлы cookie с одинаковыми именами устанавливаются в .anydomain.net и .subdomain.anydomain.net. Оба отправляются в запросе, но домены равны нулю, когда они попадают в сервлет. Является ли ожидаемым поведением то, что сервлет не может видеть домен файлов cookie, отправленных ему?

Изменить: я установил файлы cookie вместе с доменом, сроком действия и путем в предыдущем запросе к сервлету. Следующий запрос, поступающий в браузер с этими файлами cookie, показывает домен как нулевой. Я проверил, что файлы cookie устанавливаются в нужных доменах в браузере.

Редактировать 2: я использую Tomcat 6


person benw    schedule 23.06.2009    source источник
comment
Вы можете установить точки останова в методах setName() и setDomain(), чтобы проверить, правильно ли контейнер сервлета анализирует заголовок cookie. В вашем файле cookie есть двоеточия (:)? Некоторые последние версии Tomcat не принимают большинство файлов cookie с двоеточием.   -  person akarnokd    schedule 24.06.2009


Ответы (2)


Вы уверены, что можете получить что-либо, кроме значения, из файлов cookie запросов? Браузер отправит только имя=значение в заголовке HTTP Cookie.

Другие атрибуты (безопасный, домен, путь, срок действия) доступны только для файлов cookie, которые вы сами установили в ответ. Они используются для создания заголовков ответа Set-Cookie.

person Thilo    schedule 24.06.2009

Такие свойства, как домен, используются для файла cookie только тогда, когда он является частью ответа (например, в заголовке Set-Cookie). Клиент (например, веб-браузер) должен отправлять только те файлы cookie, которые имеют правильный домен (путь и т. д.). Таким образом, запрос видит только значения, потому что сам заголовок (Cookie) содержит только значения. Ваш клиент не должен отправлять файлы cookie с разных доменов на сервер.

person Kathy Van Stone    schedule 24.06.2009