Java Cookie未被读取

Java Cookie未被读取,java,jsf,cookies,jsf-2,missing-cookies,Java,Jsf,Cookies,Jsf 2,Missing Cookies,我在我的web应用程序中实现了“记住我”功能。我使用了一个cookie,其中包含使用RSA加密的用户名/密码 我在登录时添加cookie;如果然后我注销(不关闭浏览器),cookie被读取为ok,并且在登录页面中我看到用户名/密码已经输入。 但如果我关闭浏览器;或者关闭选项卡并再次运行应用程序,当读取cookie时,唯一读取的cookie是JSESSIONID。具有凭据的cookie不在由返回的数组中 ((HttpServletRequest)facesContext.getExternalCo

我在我的web应用程序中实现了“记住我”功能。我使用了一个cookie,其中包含使用RSA加密的用户名/密码

我在登录时添加cookie;如果然后我注销(不关闭浏览器),cookie被读取为ok,并且在登录页面中我看到用户名/密码已经输入。 但如果我关闭浏览器;或者关闭选项卡并再次运行应用程序,当读取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:这很奇怪,但现在似乎起作用了。我会继续测试并通知你。谢谢。

您可能需要将cookie设置为过期日期。如果你不这样做,它只会持续浏览器会话的时间。

我发现了为什么有时候不读取cookie。它与路径属性有关

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

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

关于

将用户名和密码存储在cookie中,无论是否加密,听起来都不是一个很好的主意。你可以在设置cookie的地方发布代码吗?代码添加了@Kal@Matti Virkkunen,我知道这不是一个好主意,但就我而言,这是我唯一的选择,因为我正在开发的web应用程序只是现有系统的web界面。我正在使用web服务调用应用程序服务器(其中包含数据库和大部分逻辑),很抱歉,我忘了这么说。我使用以下代码将maxAge设置为一天:credCookie.setMaxAge(86400);这是有效的,因为当我在浏览器中看到cookie时,在“Expires”字段中我看到了明天的日期。