2011-05-02 76 views
2

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

+0

存储在cookie中的用户名和密码,加密与否,听起来不像一个非常好的主意 – 2011-05-02 19:51:57

+0

你可以发布你设置cookie的代码吗? – Kal 2011-05-02 19:59:44

+0

添加代码@Kal @Matti Virkkunen,我知道这不是一个好主意,但在我的情况下,这是我获得的唯一选择,因为我正在开发的Web应用程序只是现有系统的Web界面。我正在使用Web服务调用应用服务器(包含数据库和大部分逻辑) – Damian 2011-05-02 20:27:08

回答

3

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

如果有人有这个问题,设置cookie的路径,像这样:

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

问候

0

您可能希望设置带有到期日期的cookie。如果你不这样做,它只会持续浏览器会话。

+0

对不起,我忘了说。我使用下面的代码将maxAge设置为一天:credCookie.setMaxAge(86400);这是工作的,因为当我在浏览器中看到cookie时,在“Expires”字段中,我会看到明天的日期。 – Damian 2011-05-02 19:58:32