Java 用Servlet处理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

我在Servlet中正确设置(持久/跨浏览器会话)cookie的数据并在过滤器中读取它时遇到问题

Servlet(在登录时运行)的代码是:

这将在响应中获取cookie,但当我使用以下代码在筛选器中读取cookie时:

    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);