2011-05-02 78 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