我在 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 时域为空。 servlet 看不到发送给它的 cookie 域是预期的行为吗?
编辑:我在之前对 servlet 的请求中设置了 cookie 以及域、过期时间和路径。使用这些 cookie 进入浏览器的下一个请求将域显示为空。我已验证在浏览器的正确域中设置了 cookie。
编辑 2:我正在使用 Tomcat 6
最佳答案
你确定除了请求 cookie 的值之外你能得到任何东西吗? 浏览器将仅在 HTTP Cookie header 中发送 name=value。
其他属性(安全、域、路径、过期时间)仅适用于您自己设置到响应中的 cookie。 它们用于创建 Set-Cookie 响应 header 。
关于Java Servlet API 2.5 Cookie.getDomain() 总是返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1035356/