溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報302錯誤的問題

發(fā)布時間:2021-09-03 09:12:41 來源:億速云 閱讀:158 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹了如何解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報302錯誤的問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

用ThinkPHP開發(fā)一個項目,集成了批量上傳文件插件Uploadify,在谷歌Chrome和IE下都能正常上傳,只有火狐下提示這個錯誤,網(wǎng)上找了很多解決辦法,基本都說flash在firefox下重新發(fā)起session會話,由于session沒有驗證通過所以報錯,這個問題網(wǎng)上有很多解決方案,但是試了很多,都沒有真正解決我的問題,最后看了官方的解決方案
http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/
才真正解決,我用的是ThinkPHP框架,同時我開啟了_initialize()(不知道這個函數(shù)的去看下ThinkPHP幫助手冊),在這個函數(shù)里,我執(zhí)行了一個檢測用戶是否登陸的驗證函數(shù),這樣每次訪問控制器,都會執(zhí)行驗證用戶是否登陸有權(quán)限執(zhí)行相應(yīng)操作,但是因為在火狐中,flash發(fā)起的請求并沒有連同SESSIONID一同發(fā)送到ThinkPHP控制器,所以導致了無法通過用戶登陸請求,這時我們可以在uploadify的formData參數(shù)中定義一個SESSIONID,這樣就可以通過$_POST或$_GET的方法將SESSIONID發(fā)送到控制器,在控制器把傳遞過去的SESSIONID設(shè)置為當前會話的SESSIONID,這樣就可以通過驗證了,但是,這里需要注意一條,重新設(shè)置SESSIONID必須要放在執(zhí)行驗證登陸函數(shù)的前邊,否則無效,因為如果登陸驗證不通過,那么后邊的代碼就都不會執(zhí)行了,我之前就犯了這樣的錯誤,將重置SESSION放到了上傳文件處理的函數(shù)中,下面貼上詳細的代碼,以供大家參考:

客戶端(ThinkPHP上傳文件模板)代碼

$(function()
 {

   $('#file_upload').uploadify({

    'formData' 

: {

     '<{:session_name()}>'

: '<{:session_id()}>',
//此處獲取SESSIONID

     'timestamp'

: '<{$timestamp}>',

     'token' 

: '<{$token}>'

    }

     //后邊對于解決本問題無關(guān)代碼省略。。。

    })

}

服務(wù)器端(ThinkPHP控制器)代碼

//初始化執(zhí)行

 public

function 
_initialize(){

  //此處為解決Uploadify在火狐下出現(xiàn)http
 302錯誤 重新設(shè)置SESSION

  $session_name

= session_name();

  if

(isset($_POST[$session_name]))
 {

   session_id($_POST[$session_name]);

   session_start();

  }

   //執(zhí)行登陸驗證檢測函數(shù)

  $this->powerverify();  

 }

為大家分享了我自己親身實例之外,還在網(wǎng)上找到了其他朋友的實例進行了整理,希望對大家的學習有所啟發(fā)。

標題:PHP Uploadify 火狐下報 302錯誤
大概原因:在Uploadify官網(wǎng)已經(jīng)說明,是說Flash有一個Bug它提交請求的時候不會自動帶session,所以瀏覽器判斷沒有獲取到session值,我用的ThinkPHP框架,_initialize(){}(在執(zhí)行其他方法前會先執(zhí)行這個函數(shù),我用它來判斷用戶是否登錄),在這個函數(shù)中,我照網(wǎng)上的方法:
基本思路:根據(jù)Flash這個bug的原理來做的,就是我們把session值作為一個參數(shù)一起上傳.
Uploadify官網(wǎng)也說了解決之道:給一個選項
formData: {‘SESSION NAME':'SESSIOIN ID'}----------------json格式
我用隱藏域把這些變量保存在模板中(值可以得到),然后在js文件中我直接寫作:

var session_name = (使用Jquery通過選擇器獲取得到值)
var session_id = (同上);
formData: {session_name, session_id},

其他解決思路:
這個問題確實存在,其實這個問題可以轉(zhuǎn)化為session丟失。雖然您針對session進行了特殊處理,作為參數(shù)傳入,但是不代表您服務(wù)端正確獲取,建議您進入debug模式跟蹤一下服務(wù)器端是否正確獲取參數(shù),并順利加載session。另外還有個問題,如果您當前打開url與您提交form的url是一樣的,還得記得加上隨機數(shù)。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何解決ThinkPHP下使用上傳插件Uploadify瀏覽器firefox報302錯誤的問題”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI