Java Servlet API 2.5 Cookie.getDomain () всегда возвращает нуль - PullRequest
15 голосов
/ 24 июня 2009

У меня проблема с использованием класса 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 в запросе Домен является нулевым. Почему это? Причина, по которой я спрашиваю, заключается в том, что у меня есть cookie с одинаковым именем в двух разных доменах, и я хочу иметь возможность различать их по доменам Чтобы прояснить ситуацию, мои файлы cookie с одинаковыми именами устанавливаются в .anydomain.net и .subdomain.anydomain.net. Оба отправляются в запросе, но домены имеют нулевое значение, когда они попадают в сервлет. Ожидается ли поведение, что сервлет не может видеть домен отправленных ему файлов cookie?

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

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

Ответы [ 2 ]

23 голосов
/ 24 июня 2009

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

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

7 голосов
/ 24 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...