在ssh項目中集成了swfupload做文件上傳,之前一直都工作得挻好,直到新殺到一員工,他的機器新穎,預裝的是IE9,我叫他卸了,裝IE8(因爲項目主要是在IE8中使用),結果win7提示不能裝IE8.得了,那就用IE9吧,頂多再裝一個IETester.就這樣,這位新同學一直用他的IE9測試系統,有一天他發一個bug,就是用IE8能上傳文件,用IE9就不行,神馬...上傳文件都跟瀏覽器有關係...晴天霹靂...親自去驗證了下,結果真是這樣.是什麼回事呢...苦思一陣,無果.只有斷點調試了.發現請求根本沒有傳給action,而是被權限過濾器(Filter)給欄住了,此過濾器會去session中取出登錄用戶,並驗證是否有權訪問此URL,結果在session中沒有取到用戶,而直接拒絕訪問此URL,怎麼會在session中取不到用戶呢,經過努力調試發現,swfupload上傳文件時,重新創建了一個session,此新session肯定找到不到登錄用戶.於是想能不能讓它不創建session,而重用現在的session呢.最後還是找到解決方案,那就是使用URL重寫技術,將jsessionid寫在url後面,就可以重用現在的session了.
沒有使用URL重寫技術的示例代碼如下:
var settings={
upload_url: "/common/adjunct.do?method=swfuploadFile",
//...
};
swfu = new SWFUpload(settings);
使用了URL重寫技術後的代碼如下:
var settings={
upload_url: "/common/adjunct.do;jsessionid="+jsessionid+"?method=swfuploadFile",
//...
};
swfu = new SWFUpload(settings);
注意:上面的jsessionid變量的值是當前session對象的id(request.getSession().getId())