解決ssh項目用swfupload上傳文件時session丟失問題.

在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())



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章