我在我的web应用程序中实现了“记住我”功能。我使用包含使用RSA加密的用户名/密码的cookie来做到这一点。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:这是很奇怪的,但它似乎是现在的工作。我会继续测试并通知。谢谢。
存储在cookie中的用户名和密码,加密与否,听起来不像一个非常好的主意 – 2011-05-02 19:51:57
你可以发布你设置cookie的代码吗? – Kal 2011-05-02 19:59:44
添加代码@Kal @Matti Virkkunen,我知道这不是一个好主意,但在我的情况下,这是我获得的唯一选择,因为我正在开发的Web应用程序只是现有系统的Web界面。我正在使用Web服务调用应用服务器(包含数据库和大部分逻辑) – Damian 2011-05-02 20:27:08