2011-12-19 31 views
1

我正在做一些非常簡單的工作。將maxage(0)設置爲HTTPServlet中的cookie doPost()並重定向不起作用

我對此是應該註銷並刪除登錄cookie的按鈕的HTML頁面,按下時,它/運行該代碼在servlet:

@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, 
     IOException { 
    deleteCookie(req, resp); 

    resp.sendRedirect("login"); 

} 

private void deleteCookie(HttpServletRequest req, HttpServletResponse resp) { 
    Cookie[] cookies = req.getCookies(); 

    if (cookies != null) { 
     for (Cookie cookie : cookies) { 

      if (CID_KEY_NAME.equals(cookie.getName())) { 
       cookie.setMaxAge(0); // Should make the browser delete the cookie 
       cookie.setValue(null); 
       resp.addCookie(cookie); 

      } 
     } 
    } 
} 

sendRedirect("login")送我到一個新的servlet這負責登錄,但當我到達新的servlet並檢查上面的cookie的存在時,我可以看到它存在與最大值-1 -1

我做錯了什麼?

回答

0

IE的解決方案是,我應該設置路徑爲設置cookie和刪除它。

鉻沒有路徑好。

1

HTTP Cookies: What's the difference between Max-age and Expires?,至少的Internet Explorer 6,7和8不支持Max-Age,但支持Expires。如果這是你的問題,那麼我會嘗試設置這兩個爲:

問:如果我同時設置到期和最大年齡的餅乾嗎?

答:每個支持max-age的瀏覽器都會忽略到期時間,而不管它的值如何,同樣,Internet Explorer將忽略最大年齡並僅使用過期。

該頁面還有一個指向cookie persistence test page的鏈接,您可能會發現它很有用。

+0

感謝您的信息。我無法驗證它,因爲我沒有看到如何在Java Cookie(javax.servlet.http.Cookie)中定義'expire'選項。 – Ben 2011-12-19 14:09:23

+0

您可以使用Live HTTP Headers,Firebug的網絡面板等工具(在Firefox中)來抓取整個HTTP交換。雖然這不會幫助您設置價值,但它會告訴您正在交換的cookie值是什麼,這可能會提供關於發生了什麼問題的線索。 – 2011-12-19 14:26:09

+0

你對「過期」標籤是正確的,但我發現了真正的問題,而且我沒有設置路徑。 我猜Java知道要設置正確的屬性本身 – Ben 2011-12-19 15:02:13