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

2022-09-02 20:25:04

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

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

编辑2:我正在使用雄猫6


答案 1

是否确定除了从请求 Cookie 中获取值之外,还可以获得任何内容?浏览器将仅在 HTTP Cookie 标头中发送 name=value。

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


答案 2

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


推荐