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 из разных доменов на сервер.