在Servlet中正确设置(持久/跨浏览器会话) cookie的数据并在过滤器中读取它时,我遇到了一个问题。
Servlet的代码(在登录时运行)是:
String encodedValue = new String(Base64
.encodeBase64(req.getParameter("account").getBytes()));
Cookie cookie = new Cookie("projectAuthenticationCookie", encodedValue );
cookie.setMaxAge(24*60*60);
cookie.setPath("/");
res.addCookie(cookie);这将在响应中获取cookie,但当我使用以下代码在我的过滤器中读取它时:
Cookie authenticationCookie = null;
Cookie[] cookies = ((HttpServletRequest) request).getCookies();
for (Cookie cookie : cookies){
if ("projectAuthenticationCookie".equals(cookie.getName())) {
authenticationCookie = cookie;
}
}我只得到了我设置的值,所有其他字段要么为空,要么为空,要么不同。例如,最大年龄总是返回-1,因此cookie永远不会持久。

我尝试使用以下命令设置expires-header:
res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);我读到如果没有有效的expires-header,会话无论如何都会超时(如果我错了,请纠正我),但这也没有帮助……
我正在考虑的一个问题是,我在本地主机上运行(尝试设置cookie.setDomain(“本地主机”),但也没有成功)。我的web服务器/serclet容器是Jetty 7,但我不认为这是相关的……
有什么提示吗?
发布于 2011-09-07 20:59:55
除了name和value之外的其他字段不会填充到您从请求中获得的cookie上(因此没有意义)。
这些字段旨在通知浏览器有关cookie的最大年龄、路径等信息,但浏览器不会将此信息发送回服务器。只有在创建cookie并将其添加到响应中时,才需要具有正确的最大年龄、路径等。使用浏览器检查它是否存储了正确的信息,而不是试图在服务器端找到它。
https://stackoverflow.com/questions/7333780
复制相似问题