2009-06-23 9 views
14

Je rencontre un problème en utilisant la classe Cookie de l'API Servlet 2.5 sur Tomcat. Je tire la liste des cookies de l'objet HttpServletRequest et itérer sur eux comme si:Java Servlet API 2.5 Cookie.getDomain() renvoie toujours la valeur null

Cookie[] cookies = request.getCookies(); 

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

Cependant, pour tous les cookies unique dans la demande, le domaine est nulle. Pourquoi est-ce? La raison pour laquelle je demande est parce que j'ai un cookie avec le même nom dans deux domaines différents et je veux être en mesure de les différencier en fonction du domaine. Pour aider à clarifier la situation, mes cookies nommés de manière identique sont en train d'être placés dans .anydomain.net et .domain.anydomain.net. Les deux sont envoyés dans la requête mais les domaines sont NULL quand ils arrivent au servlet. Est-il attendu que le servlet ne puisse pas voir le domaine des cookies qui lui sont envoyés? Editer: Je mets les cookies avec le domaine, l'expiration et le chemin dans une demande précédente à la servlet

La requête suivante arrivant dans le navigateur avec ces cookies montre le domaine comme nul. J'ai vérifié que les cookies sont réglés dans les bons domaines dans le navigateur.

Edit 2: J'utilise Tomcat 6

+0

Vous pouvez définir des points d'arrêt sur les méthodes setName() et setDomain() pour vérifier si le conteneur de servlet analyse correctement l'en-tête de cookie. Est-ce que votre cookie a des deux-points (:) dedans? Certaines versions récentes de Tomcat n'acceptent pas la plupart des cookies avec deux points. – akarnokd

Répondre

22

Etes-vous sûr que vous pouvez obtenir quoi que ce soit, sauf la valeur des biscuits de demande? Le navigateur n'enverra que name = value dans l'en-tête HTTP Cookie.

Les autres attributs (sécurisé, domaine, chemin, expiration) ne sont disponibles que pour les cookies que vous définissez vous-même dans la réponse. Ils sont utilisés pour créer les en-têtes de réponse Set-Cookie.

7

Les propriétés telles que le domaine ne sont utilisées que pour un cookie lorsqu'il fait partie de la réponse (c'est-à-dire dans l'en-tête Set-Cookie). Un client (tel qu'un navigateur Web) devrait seulement envoyer les cookies qui ont le bon domaine (chemin, etc.). La requête ne voit donc que des valeurs car l'en-tête lui-même (Cookie) ne contient que des valeurs. Votre client ne doit pas envoyer de cookies de différents domaines au serveur.

Questions connexes