Cookie没有被读取

时间:2011-05-02 19:49:50

标签: java jsf cookies jsf-2 missing-cookies

我在网络应用中实施了“记住我”功能。我使用包含使用RSA加密的用户名/密码的cookie来完成此操作。

我登录时添加了cookie;如果然后我退出(没有关闭浏览器)cookie被读取正确,在登录页面我看到用户名/通行证已经输入。 但是,如果我关闭浏览器;或者关闭选项卡并再次运行应用程序,当读取cookie时,唯一读取的cookie是JSESSIONID。具有凭据的cookie不在返回的数组中 ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies(­); 即使我可以在浏览器中看到它。那是为什么?

这是创建cookie的代码:

String credentials = username + "?" + password;
Cookie c = CookieHandler.getInstance().createCookie("vtcred", credentials, rememberMe);
FacesContext facesContext = FacesContext.getCurrentInstance();
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(c);

和方法createCookie:

public Cookie createCookie(String name, String value, boolean rememberMe) {
        value = encript(value);
        Cookie credCookie = new Cookie(name, value);
        credCookie.setHttpOnly(true);
        if(rememberMe) {
            credCookie.setMaxAge(86400);
        }
        else {
            credCookie.setMaxAge(0);
        }
        return credCookie;
    }

编辑:我将cookie的最大年龄设置为一天;并且在浏览器中我可以看到cookie明天到期,所以这不是问题

提前致谢, 达米安

edit2:这很奇怪,但它现在似乎正在运作。我会继续测试并通知。感谢。

2 个答案:

答案 0 :(得分:3)

我发现为什么有时候不会读取cookie。它与path属性有关。

如果有人遇到此问题,请设置Cookie的路径,如下所示:

Cookie c = new Cookie("name", "value");
cookie.setMaxAge(86400);
cookie.setPath("/");

此致

答案 1 :(得分:0)

您可能希望将Cookie设置为过期日期。如果你不这样做,它只会持续浏览器会话。