2010-07-07 81 views
10

使用的cookie具有相同名稱的安全調用調用HttpServletResponse.addCookie()具有相同的cookie名稱安全嗎?

HttpServletResponse.addCookie(); 

(從servlet的API-2.5)多次?

從某種意義上說安全是有確定性的行爲,例如,後續的調用將被忽略(第一次獲勝),或者後續的調用將總是取代cookie或類似的東西?

實施例:

HttpServletResponse response = ...; 
response.addCookie(new Cookie("foo", "bar")); 
response.addCookie(new Cookie("foo", "42")); 

哪些值將被瀏覽器傳送並存儲?

回答

6

更新回答 - 正如@skaffman和@Stephen C的評論所示,這不是理想的做法。

的RFC規格在http://www.ietf.org/rfc/rfc2109.txt狀態

名稱=值屬性值對 必須先來在每個cookie。 如果一個屬性在cookie中多次出現 ,則 行爲未定義。

在Tomcat服務器,該行爲是發送給瀏覽器的實際標題:

的Set-Cookie:富=酒吧
的Set-Cookie:FOO = 42

這裏foo被覆蓋。稍後閱讀cookie將爲您提供42.

+1

所有這些都證明'HttpServletResponse'的具體實現可以做些什麼。儘管API沒有定義行爲,所以其他實現可能會做其他事情。 – skaffman 2010-07-07 09:00:53

+0

嗯,我已經建議O/P在他的服務器上嘗試驗證行爲 – JoseK 2010-07-07 09:41:22

+2

好,最好是建議他不要這樣做!它正在創造一個潛在的可移植性問題。 – 2010-07-07 09:56:20

2

其他註釋 - 請注意,在同一響應中爲具有相同名稱的Cookie設置不同的子域會改變行爲。我剛剛在我的Mac上測試了在最新版本的java 1.6/firefox/safari/chrome上保存具有相同名稱但不同子域的cookies,並且它的行爲如預期,同時保存了這兩個cookie。我理解這種行爲不是由規格保證的,但只是說'知道它可能會有所幫助。