2009-06-23 14 views
14

Mam problem z wykorzystaniem klasy Cookie z Servlet API 2.5 na Tomcat. I wyciągnąć listę plików cookie z obiektu HttpServletRequest i iteracyjne nad nimi tak:Java Servlet API 2.5 Cookie.getDomain() zawsze zwraca wartość null

Cookie[] cookies = request.getCookies(); 

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

Jednak dla każdego pliku cookie w żądaniu domena jest zerowa. Dlaczego to? Pytam, ponieważ mam plik cookie o tej samej nazwie w dwóch różnych domenach i chcę móc je rozróżnić na podstawie domeny. Aby pomóc w wyjaśnieniu sytuacji, moje identycznie nazwane pliki cookie są ustawiane w domenie .domdomain.net i .subdomain.anydomain.net. Oba są wysyłane w żądaniu, ale domeny są puste, gdy docierają do serwletu. Czy jest oczekiwane zachowanie, że serwlet nie może zobaczyć domeny plików cookie wysłanych do niego?

Edytuj: Ustawiam pliki cookie wraz z domeną, datą wygaśnięcia i ścieżką w poprzednim żądaniu do serwletu. Kolejne żądanie przychodzące do przeglądarki za pomocą tych plików cookie pokazuje domenę jako wartość null. Sprawdziłem, czy pliki cookie są ustawiane we właściwych domenach w przeglądarce.

Edit 2: Używam Tomcat 6

+0

Można ustawić punkty przerwania w metodach setName() i setDomain(), aby sprawdzić, czy kontener serwletu prawidłowo analizuje nagłówek pliku cookie. Czy twój plik cookie ma dwukropki (:) w nim? Niektóre najnowsze wersje Tomcat nie akceptują większości ciasteczek z dwukropkiem. – akarnokd

Odpowiedz

22

Czy jesteś pewien, że można dostać nic oprócz wartości z życzeniem ciasteczek? Przeglądarka wyśle ​​tylko name = value w nagłówku HTTP Cookie.

Inne atrybuty (secure, domain, path, expiration) są dostępne tylko w przypadku plików cookie ustawionych w odpowiedzi samodzielnie. Służą do tworzenia nagłówków odpowiedzi Set-Cookie.

7

Właściwości, takie jak domena, są używane tylko w przypadku plików cookie, gdy są częścią odpowiedzi (np. W nagłówku pliku cookie). Klient (taki jak przeglądarka internetowa) powinien wysyłać tylko pliki cookie, które mają poprawną domenę (ścieżkę itp.). Żądanie widzi tylko wartości, ponieważ sam nagłówek (plik cookie) zawiera tylko wartości. Twój klient nie powinien wysyłać plików cookie z różnych domen do serwera.

Powiązane problemy