我在网络应用中实施了“记住我”功能。我使用包含使用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:这很奇怪,但它现在似乎正在运作。我会继续测试并通知。感谢。
答案 0 :(得分:3)
我发现为什么有时候不会读取cookie。它与path属性有关。
如果有人遇到此问题,请设置Cookie的路径,如下所示:
Cookie c = new Cookie("name", "value");
cookie.setMaxAge(86400);
cookie.setPath("/");
此致
答案 1 :(得分:0)
您可能希望将Cookie设置为过期日期。如果你不这样做,它只会持续浏览器会话。