首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Servlet处理Cookie

使用Servlet处理Cookie
EN

Stack Overflow用户
提问于 2011-09-07 20:19:07
回答 1查看 2.3K关注 0票数 1

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

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

代码语言:javascript
复制
    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,但当我使用以下代码在我的过滤器中读取它时:

代码语言:javascript
复制
    Cookie authenticationCookie = null;
    Cookie[] cookies = ((HttpServletRequest) request).getCookies();
    for (Cookie cookie : cookies){
        if ("projectAuthenticationCookie".equals(cookie.getName())) {
            authenticationCookie = cookie;
        }
    }

我只得到了我设置的值,所有其他字段要么为空,要么为空,要么不同。例如,最大年龄总是返回-1,因此cookie永远不会持久。

我尝试使用以下命令设置expires-header:

代码语言:javascript
复制
    res.setDateHeader("Expires", System.currentTimeMillis() + 24*60*60*1000);

我读到如果没有有效的expires-header,会话无论如何都会超时(如果我错了,请纠正我),但这也没有帮助……

我正在考虑的一个问题是,我在本地主机上运行(尝试设置cookie.setDomain(“本地主机”),但也没有成功)。我的web服务器/serclet容器是Jetty 7,但我不认为这是相关的……

有什么提示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-07 20:59:55

除了name和value之外的其他字段不会填充到您从请求中获得的cookie上(因此没有意义)。

这些字段旨在通知浏览器有关cookie的最大年龄、路径等信息,但浏览器不会将此信息发送回服务器。只有在创建cookie并将其添加到响应中时,才需要具有正确的最大年龄、路径等。使用浏览器检查它是否存储了正确的信息,而不是试图在服务器端找到它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7333780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档