Java 用Servlet处理Cookie
我在Servlet中正确设置(持久/跨浏览器会话)cookie的数据并在过滤器中读取它时遇到问题 Servlet(在登录时运行)的代码是: 这将在响应中获取cookie,但当我使用以下代码在筛选器中读取cookie时:Java 用Servlet处理Cookie,java,session,servlets,cookies,Java,Session,Servlets,Cookies,我在Servlet中正确设置(持久/跨浏览器会话)cookie的数据并在过滤器中读取它时遇到问题 Servlet(在登录时运行)的代码是: 这将在响应中获取cookie,但当我使用以下代码在筛选器中读取cookie时: Cookie authenticationCookie = null; Cookie[] cookies = ((HttpServletRequest) request).getCookies(); for (Cookie cookie : cookies
Cookie authenticationCookie = null;
Cookie[] cookies = ((HttpServletRequest) request).getCookies();
for (Cookie cookie : cookies){
if ("projectAuthenticationCookie".equals(cookie.getName())) {
authenticationCookie = cookie;
}
}
我只得到正确设置的值,所有其他字段要么为null,要么为空,要么不同。例如,Max age总是返回-1,因此cookie将永远不会持久
我尝试使用以下设置expires标头:
res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);
正如我读到的,没有有效的expires头,会话无论如何都会超时(如果我错了,请纠正我),但这也没有帮助
我想到的一个问题是,我正在本地主机上运行(尝试设置cookie.setDomain(“localhost”),但也没有成功)。我的web服务器/serclet容器是Jetty 7,但我认为这与此无关
有任何提示吗?从请求中获得的cookie上没有填充除名称和值以外的字段(因此没有意义)
这些字段用于向浏览器通知最大年龄;路径等,但浏览器不会将此信息发送回服务器。只有在创建cookie并将其添加到响应中时,才需要有正确的最大年龄、路径等。使用您的浏览器检查它是否存储了正确的信息,而不是试图在服务器端找到它。从请求中获得的cookie上没有填充除名称和值以外的字段(因此没有意义)
这些字段用于向浏览器通知最大年龄;路径等,但浏览器不会将此信息发送回服务器。只有在创建cookie并将其添加到响应中时,才需要有正确的最大年龄、路径等。使用您的浏览器检查它是否存储了正确的信息,而不是试图在服务器端找到它。为什么您在筛选器中需要这些信息?如果maxage已经过期,那么客户端就不会将cookie发回。您只需在服务器中检查它是否存在,而无需知道它是否仍然有效。为什么您在筛选器中需要此信息?如果maxage已经过期,那么客户端就不会将cookie发回。您只需在服务器中检查它是否存在,而无需知道它是否仍然有效。
res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);