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

18

我在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的域都是null。为什么会这样?我问这个问题的原因是因为我在两个不同的域中有一个同名的cookie,我想能够根据域来区分它们。为了澄清情况,我的同名cookie被设置在.anydomain.net和.subdomain.anydomain.net中。在请求中两者都被发送,但是它们到达servlet时域为空。servlet无法看到发送给它的cookie的域,这是否是预期行为?

编辑:我在以前的请求中与域、过期时间和路径一起设置了cookie到servlet中。接下来的请求带有这些cookie,但是显示的域为空。我已经验证了浏览器中的cookie被设置在正确的域中。

编辑2:我正在使用Tomcat 6


你可以在setName()和setDomain()方法上设置断点,以检查Servlet容器是否正确解析了cookie头部。你的cookie中有冒号(:)吗?一些较新版本的Tomcat不接受带有冒号的大多数cookie。 - akarnokd
2个回答

26

你确定除了请求cookie中的值之外,还能获取其他内容吗? 浏览器只会在HTTP Cookie头中发送名称=值。

其他属性(如secure、domain、path和expiration)仅适用于你自己设置到响应中的cookie,它们用于创建Set-Cookie响应头。


9

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接