2009-06-23 7 views
14

Sto riscontrando un problema utilizzando la classe Cookie dell'API Servlet 2.5 su Tomcat. Tiro fuori la lista dei cookie dall'oggetto HttpServletRequest e iterare su di loro in questo modo:API Java Servlet 2.5 Cookie.getDomain() restituisce sempre null

Cookie[] cookies = request.getCookies(); 

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

Tuttavia, per ogni singolo cookie nella richiesta del dominio è nullo. Perchè è questo? Il motivo per cui lo chiedo è perché ho un cookie con lo stesso nome in due domini diversi e voglio essere in grado di distinguere tra loro in base al dominio. Per aiutare a chiarire la situazione, i miei cookie identicamente denominati vengono impostati in .anydomain.net e .subdomain.anydomain.net. Entrambe vengono inviate nella richiesta ma i domini sono nulli quando arrivano al servlet. È previsto un comportamento che il servlet non possa vedere il dominio dei cookie ad esso inviati?

Modifica: ho impostato i cookie insieme al dominio, alla scadenza e al percorso in una richiesta precedente al servlet. La prossima richiesta che arriva nel browser con questi cookie mostra il dominio come null. Ho verificato che i cookie vengono impostati nei domini giusti nel browser.

Edit 2: sto usando Tomcat 6

+0

È possibile impostare punti di interruzione sul metodo setName() e setDomain() per verificare se il contenitore del servlet analizza correttamente l'intestazione del cookie. I tuoi cookie hanno due punti (:)? Alcune versioni recenti di Tomcat non accettano la maggior parte dei cookie con due punti. – akarnokd

risposta

22

Sei sicuro che si può ottenere nulla, tranne il valore di richiesta cookie? Il browser invierà solo nome = valore nell'intestazione del cookie HTTP.

Altri attributi (sicuro, dominio, percorso, scadenza) sono disponibili solo per i cookie impostati dall'utente nella risposta. Sono usati per creare le intestazioni di risposta Set-Cookie.

7

Proprietà come dominio vengono utilizzate solo per un cookie quando fa parte della risposta (ovvero nell'intestazione Set-Cookie). Un client (come un browser Web) deve solo inviare i cookie che hanno il dominio corretto (percorso, ecc.). La richiesta quindi vede solo valori perché l'intestazione stessa (Cookie) contiene solo valori. Il tuo cliente non dovrebbe inviare cookie da domini diversi al server.