在網上找到的:
在項目中要用到FLASH上傳,選擇了swfupload上傳組件。因為一些定製化需求,感覺這個東西做得挺不錯的。在IE下測試很正常,但項目組其他成員有的習慣了用FF,結果在FF上報 302 錯誤。
在網上搜尋了很多文章,有中文的,也有英文的,都說是session的問題,Firefox不儲存session,需要傳遞sessionID,說的很不清楚。其實在前台配置的時候也使用了params:{"jsessionid","<%=session.getId()%>"},感覺上是傳遞了SESSIONID的,仍然不行。再查了一下TOMCAT預設的是不是都取的JSESSIONID,在COOKIE裡面確實取到了這個值,但還是報同樣的錯誤。
一篇部落格中寫到:
Firefox下使用swfupload不儲存session的確沒錯,但是如果你在這個上傳過程中不需要使用session的話,是不會產生影響的。比如我發現我出現這個錯誤的原因就是因為我做了一個登陸的驗證,對後台代碼都進行了一個驗證。因此去尋找了session中儲存的變數,結果因為Firefox在使用swfupload時,不儲存session。導致產生302錯誤。
所以有這種情況的朋友,請仔細檢查你的代碼是否有過濾和攔截的情況,如果有這種情況,最好對swfupload的情況作一個特殊處理。
事實也正是如此。在項目中的ACESSFILTER中進行了測試,發現FF中使用swfupload上傳時確實被重新導向到了我們指定的未登陸跳轉頁面。於是,將JSESSIONID作為URL參數,如果有該參數且等於當前SESSIONID,則不過濾該請求。OK,搞定。
總結三點:
1、在FF下,swfupload上傳請求過程中會session丟失(如果上傳請求一個Action,那麼在這個Action中你取不到任何值)。
2、如果項目代碼中有過濾和攔截,要對swfupload請求進行特殊處理。
3、在請求Action中想通過session取的值通過swfupload參數post_params手動傳過去。