2011-01-19 60 views
0

這裏又是一番景象如何直接在Http Headers上直接使用HttpOnly更新Cookie JSESSIONID?

我想追加「的HttpOnly」到JSESSIONID餅乾,但我想用手工做這個,意思是:

//create a new cookie 
StringBuilder updatedCookie = new StringBuilder("JSESSIONID").append("=") 
       .append(sessionId).append("; Path=").append("/") 
       .append("; HttpOnly"); 

//save the cookie 
response.setHeader("SET-COOKIE", updatedCookie.toString()); 

這是在一個Servlet過濾器完成,即映射到所有網站(該過濾器的網址格式爲「/ *」)

  1. 如何才能讓此過濾器只運行一次?也就是說,在登錄時,或者
  2. 我是否真的必須運行每個請求並檢查此cookie是否已被標記,如果答案爲「yes」則跳過?

有什麼建議嗎?

PS:

  1. 不要告訴我升級到Servlet的3.0,因爲我不能這樣做,現在
  2. 忽略不當使用StringBuilder和失蹤可變的sessionId

回答

1

如何讓此過濾器只運行一次?也就是說,登錄時

不可能。會話可能已經預先創建。

從理論上講,你最好的地方是HttpSessionListener#sessionCreated(),但是這並不以任何方式向你提供HttpServletResponse對象,所以你迷路了。

我是否真的得在每個請求中運行並檢查這個cookie是否已經被標記過,如果答案是「yes」,則跳過?

是的。但是,這應該特別便宜。