uploadify上傳檔案在360瀏覽器急速模式下失敗
使用uploadify控制元件操作檔案上傳,發現此控制元件是單個檔案上傳,比如我選擇了5個檔案,點選上傳,是分別呼叫5次上傳方法進行儲存;
在IE9+及谷歌下操作均正常,360瀏覽器相容模式下也能正常操作,但是360極速模式下報302錯誤,網上找資料講的基本上是:
1、js或css檔案路徑不對,比如:IE、谷歌<script type="text/javascript" src="uploadify/jquery.uploadify.js"></script>
但是在360極速模式下需要<script type="text/javascript" src="/uploadify/jquery.uploadify.js"></script>或<script type="text/javascript" src="./uploadify/jquery.uploadify.js"></script>
2、路徑請求:如下圖
需要在swf檔案路徑後新增隨機數保證每次請求不同;
總結:以上好像針對老版本的可以生效,但是新版本的uploadify似乎不行;
最後發現,原因是uploadify傳送請求時,360瀏覽器極速模式下不傳送session(網上查詢得出),攔截器獲取的session一直為null,導致攔截判斷當前未登入而沒有進行上傳操作(使用者未登入無法獲取當前操作人員);
以下為攔截器程式碼:
開始想:在初始化上傳頁面的時候生成個隨機數,然後將隨機數儲存在session中,並且傳送到頁面,儲存時講這個隨機數帶到後臺,判斷session是否存在這個隨機數,存在即讓通過;測試發現,通過session.getAttribute("隨機數Id")一直未null;
後來通過獲取初始化時的sessionId和上傳請求是的sessionId發現,並不是同一個session,由於uploadify上傳操作請求,是基於外掛發出的,和瀏覽器的請求有區別;
最後只能在使用者登入成功之後,將session儲存到一個Map集合中,key為sessionId,在頁面初始化話是,將sessionId帶到頁面,隨著上傳請求一起傳送到後臺,然後驗證當前session如果為空時(上面講了360瀏覽器不傳送session導致session為空),拿到上傳操作中的sessionId,到Map集合中驗證是否存在session,如存在,則說明使用者已經登陸,正常通過;