Java Cookie未被读取
我在我的web应用程序中实现了“记住我”功能。我使用了一个cookie,其中包含使用RSA加密的用户名/密码 我在登录时添加cookie;如果然后我注销(不关闭浏览器),cookie被读取为ok,并且在登录页面中我看到用户名/密码已经输入。 但如果我关闭浏览器;或者关闭选项卡并再次运行应用程序,当读取cookie时,唯一读取的cookie是JSESSIONID。具有凭据的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
((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”字段中我看到了明天的日期。