2011年9月5日 星期一

tomcat jsessionid url problem

Spring MVC 可以 cache static content, 例如圖檔, js, css...

參考文件

但我之前遇到一個問題, 就是原本應顯示為 /appbased/static-1.0.0/images/xxx 的 URL

第一次執行時, URL 卻會變成 /appbased/static-1.0.0?jsessionid=481AFDE46F818357ED2096824F250AFF/images/xxx

需重新 reload 一次才回復正常.

當時我的作法是, 在首次登入頁面的 jsp 前面加一行
<% request.getSession(true).invalidate(); %>
即可.


但最近又遇到另一個問題, 就是首頁有可能是登入狀態, 也有可能是未登入狀態, 總不能老是把 session 抓出來幹掉裝作沒事, 故查了一下解法.



原來這是 tomcat 的問題 (我錯怪 spring 了)


若是 tomcat 7, 可以在設定檔內處理
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>


tomcat 6 的話, 此 bug 於 6.0.33 後解決 (請參考這裡)



JSESSIONID considered harmful文章, 對 jsessionid 有詳細的說明, 也有 filter 的作法.
推薦一讀.


Purging jsessionids 則提出了 url rewrite 的解法.


最後, Spring security 有個 create-session的設定, 似乎也可以用來處理此問題.


沒有留言: