2011-02-23 72 views
6

我有一個cookie,myCookie,包含的哈希值。此Cookie設置爲在一年內過期並具有「/」的路徑。我需要用新的哈希值更新這個cookie。當我的JSP腳本加載檢索到的cookie,像這樣:如何更新JSP中的現有cookie?

Cookie[] cookies = request.getCookies(); 
Cookie myCookie = null; 

for (int i = 0; i < cookies.length; i += 1) { 
    if (cookies[i].getName().equals("myCookie")) { 
    myCookie = cookies[i]; 
    break; 
    } 
} 

確定該cookie的值需要更新後,我做了以下內容更新:

myCookie.setValue("my new value"); 
response.addCookie(myCookie); 

審視結果,我現在有myCookie兩個實例:原始版本與正確的到期日和路徑,與舊的,無效的價值;和一個新的cookie命名爲「的myCookie」,使用期限在會議結束時,用正確的值,JSP文件的路徑。

如果我做的:

myCookie.setValue("my new value"); 
myCookie.setPath(myCookie.getPath()); 
myCookie.setMaxAge(myCookie.getMaxAge()); 
response.addCookies(myCookie); 

同樣的事情發生。我得到了兩個具有相同名稱和不同屬性的Cookie。

做一個Cookie對象不保留從當它被檢索的屬性?我怎樣才能更新這個cookie?

注意:我不想修改路徑或過期日期。我只想更新已經設置的cookie的值。

+0

在看看:http://stackoverflow.com/questions/4863740/change-cookie-expiry-date- http – Ralph 2011-02-23 16:03:01

+0

@Ralph,這應該怎麼幫助我? – 2011-02-23 16:04:02

+0

你的域名和路徑是否一樣? – Ralph 2011-02-23 16:04:54

回答

8

每節RFC 2965 3.3.4,用戶代理包含相同的名稱,路徑和域不包括髮送到服務器的cookie標頭中的過期信息。因此,沒有辦法更新現有Cookie的值,同時僅保留基於與Cookie關聯的信息初始設置的截止日期。

所以,這個問題的答案是:你不能這樣做。

1

如果你操縱從JSP中的cookies,有一件事你需要提防的是,是否響應已經提交。一旦將內容寫入輸出流,向響應添加cookie是徒勞的。

ServletResponseWrapper.isCommitted()

+0

謝謝。發送任何內容後我不添加cookie。我的所有cookie驗證都是在任何內容發送給客戶端之前完成的。 – 2011-02-23 19:09:55

2

剛剛成立的路徑,例如:

cookie.setPath("/"); 

這應該覆蓋舊的cookie的值。

0
def member = SecUser.get(userService.currentUser().id) 
    def cookies = request.getCookies() 
    def cookie; 
    def sum = 0; 
    def cookieSum = 0; 
    def cookieItems; 
    for(def i=0; i<cookies.size(); i++){ 
     if (cookies[i].name == 'c17'){ 
       cookie = cookies[i] 
       cookieItems = cookie.value.split('-') 
       println "cookieItems......."+cookieItems 
       if(params.itemId != null){ 
        for(def j=0; j<cookieItems.size(); j++){ 
         def oldItem = cookieItems[j].split('\\|')[0] 
         if(params.itemId != oldItem){ 
          sum = sum + 1 
         } 
        }//Below code for Update your cookie value 
       if(sum == cookieItems.size()){ 
        cookie.value = cookie.value +"-"+params.itemId+"|"+member.id 
        def b = cookie.value 
        cookie.setValue(b); 
        response.addCookie(cookie); 

       } 
       } 
       break 
      } 
      else{ 
      cookieSum = cookieSum + 1 
      } 

    } 
    if ((cookieSum) == cookies.size()){ 
     // Here ADD new cookie........ 
     def a = params.itemId+"|"+member.id 
     cookie = new Cookie('c17',a.toString()) 
     cookie.path = '/' 
     response.addCookie(cookie) 
    } 

上面的代碼可以幫助你增加一個cookie並更新cookie值

+0

1)查看爲什麼無法更新現有cookie的可接受答案。 2)你的代碼絕對不是JSP。 3)你的代碼顯然是特定於你的應用程序的(SecUser?它來自哪裏,它與這個問題有什麼關係?) – 2014-06-18 12:39:08