Java Servlet API 2.5 Cookie.getDomain()总是返回null

问题描述:

我在使用Tomcat上的Servlet API 2.5的Cookie类时遇到问题。我拔出从HttpServletRequest对象的cookie的列表,并在它们之间迭代,像这样:Java Servlet API 2.5 Cookie.getDomain()总是返回null

Cookie[] cookies = request.getCookies(); 

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

然而,在请求每一个cookie的域名为空。为什么是这样?我问的原因是因为我在两个不同的域名中拥有相同名称的cookie,我希望能够根据域名区分它们。为了澄清这种情况,我在.anydomain.net和.subdomain.anydomain.net中设置了相同名称的Cookie。两者都在请求中发送,但域到达servlet时为空。预计该servlet无法看到发送给它的cookie的域的行为?

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

编辑2:我使用的是Tomcat 6

+0

您可以在setName()和setDomain()方法上设置断点,以检查servlet容器是否正确解析cookie标头。你的cookie中有冒号(:)吗?最近的一些Tomcat版本不接受大多数带有冒号的cookie。 – akarnokd 2009-06-23 21:58:51

你确定,你可以得到除了从请求中的Cookie值什么? 浏览器只会在HTTP Cookie标头中发送name = value。

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

像域这样的属性只用于cookie,当它是响应的一部分时(即在Set-Cookie头中)。客户端(例如网络浏览器)只应发送具有正确域名(路径等)的cookie。因此,请求只能看到值,因为头本身(Cookie)只包含值。您的客户不应该将来自不同域的cookie发送到服务器。