Java Servlet API 2.5 Cookie.getDomain()始终返回null

时间:2009-06-23 21:30:22

标签: java tomcat servlets cookies

我在Tomcat上使用Servlet API 2.5的Cookie类时遇到了问题。我从HttpServletRequest对象中提取cookie列表并按如下方式迭代它们:

Cookie[] cookies = request.getCookies();

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

但是,对于请求中的每个cookie,Domain都为null。为什么是这样?我问的原因是因为我在两个不同的域中有一个同名的cookie,我希望能够根据域来区分它们。为了帮助澄清这种情况,我的同名cookie被设置在.anydomain.net和.subdomain.anydomain.net中。两者都在请求中发送,但域到达servlet时为null。 servlet无法看到发送给它的cookie域的预期行为吗?

编辑:我在之前的servlet请求中设置了cookie以及域,过期和路径。使用这些cookie进入浏览器的下一个请求将域显示为null。我已经验证了cookie已经在浏览器的正确域中设置了。

编辑2:我正在使用Tomcat 6

2 个答案:

答案 0 :(得分:23)

除了请求Cookie的价值外,您确定可以获得任何其他内容吗? 浏览器将仅在HTTP Cookie标头中发送name = value。

其他属性(安全,域,路径,到期)仅适用于您自己设置到响应中的Cookie。 它们用于创建Set-Cookie响应头。

答案 1 :(得分:7)

域等属性仅在cookie作为响应的一部分时使用(即在Set-Cookie标头中)。客户端(例如Web浏览器)应该只发送具有正确域(路径等)的cookie。因此,请求仅查看值,因为标头本身(Cookie)仅包含值。您的客户端不应该将cookie从不同的域发送到服务器。