2013-12-14 24 views
0
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
PrintWriter out = response.getWriter(); 
response.setContentType("text/html"); 

Cookie[] cookies = request.getCookies(); 
if(null != cookies) { 
    for(Cookie cookie : cookies) { 
     out.println(cookie); 
     out.println("<br>"); 
    } 
} else { 
//Set the Cookie in response, so that you can retrieve this in subsequent requests 
    Cookie PegaRULES = new Cookie("PegaRULES", "This is PegaRULES Cookie"); 
    response.addCookie(PegaRULES); 
} 

}爲什麼當新的cookie被添加到隨後的響應中時,Cookie哈希碼會發生變化?

大家好,

我上面的代碼,在理想情況下它是應該做以下

的第一個要求,因爲就沒有PegaRULES的cookie,它應該添加一個在響應

從第二個請求的病房,相同的cookie應打印在瀏覽器(我的意思是餅乾的ClassName @哈希碼像Cookie @ Ac35c)

我的意見

對於第一個要求,空白頁(如預期),並在響應中的Cookie存在

的第二個請求,餅乾@ af33d(說)

所有後續請求,它不應該改變(即同樣的Cookie @ af33d應該打印在瀏覽器上) 但是,我看到每個後續請求的價值都發生了變化(我每次刷新瀏覽器以觸發後續請求)

僅供參考,我正在使用Fiddler跟蹤請求和響應

並且我在第二次請求對病房的後續響應中沒有看到任何cookie(這和預期的一樣)。我更關心瀏覽器上打印的值,每當我更改時刷新瀏覽器(即發出新請求)

PS:與IE和Google Chrome的行爲相同

回答

0

根據documentationjavax.servlet.http.Cookie類不會覆蓋Object#hashCode,因此其實例的哈希代碼不基於在其上設置的值,而是或多或少地隨機分配給每個單獨的實例。

由於每個請求都得到一個新的實例Cookie,每次結果都是不同的哈希碼。

+0

爲什麼每個請求都會得到一個新的Cookie實例? 如果你看看那裏的邏輯,它應該只發送一次cookie,並以這種方式工作。 我看到只有一個cookie作爲第一個響應的一部分發送,並且隨後的響應不包含任何.. 我在談論這個特定情況時,應該沒有新的實例對嗎? – JavaHopper

相關問題