2

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

我登录时添加cookie;如果然后我注销(不关闭浏览器),则 cookie 读取正常,并且在登录页面中我看到用户名/密码已经输入。但是如果我关闭浏览器;或关闭选项卡并再次运行应用程序,当读取 cookie 时,读取的唯一 cookie 是 JSESSIONID。((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies(­); 即使我可以在浏览器中看到它,带有凭据的 cookie 也不在返回的数组 中。这是为什么?

这是创建 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:这很奇怪,但现在似乎可以工作了。我会继续测试并通知。谢谢。

4

2 回答 2

3

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

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

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

问候

于 2011-07-18T12:06:44.890 回答
0

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

于 2011-05-02T19:54:47.830 回答