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

У меня возникла проблема с использованием класса Cookie Servlet API 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. Оба отправляются в запрос, но домены имеют значение null, когда они попадают в сервлет. Ожидается ли, что сервлет не может видеть домен отправленных к нему файлов cookie?

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

Изменить 2: Я использую Tomcat 6

Ответы

Ответ 1

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

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

Ответ 2

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