1. 程式人生 > 其它 >ThinkPHP下使用Uploadify外掛提示HTTP Error (302)錯誤的解決辦法

ThinkPHP下使用Uploadify外掛提示HTTP Error (302)錯誤的解決辦法

最近用ThinkPHP開發一個專案,集成了批量上傳檔案外掛Uploadify,在谷歌Chrome和IE下都能正常上傳,只有火狐下提示這個錯誤,網上找了很多解決辦法,基本都說flash在firefox下重新發起session會話,由於session沒有驗證通過所以報錯,這個問題網上有很多解決方案,但是試了很多,都沒有真正解決我的問題,最後看了官方的解決方案
http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/
才真正解決。

問題:我用的是ThinkPHP框架,同時我開啟了_initialize()(不知道這個函式的去看下ThinkPHP幫助手冊),在這個函式裡,我執行了一個檢測使用者是否登陸的驗證函式,這樣每次訪問控制器,都會執行驗證使用者是否登陸有許可權執行相應操作,但是因為在火狐中,flash發起的請求並沒有連同SESSIONID一同傳送到ThinkPHP控制器,所以導致了無法通過使用者登陸請求;

解決方法:這時我們可以在uploadify的formData引數中定義一個SESSION資料,這樣就可以通過$_POST或$_GET的方法將SESSION資料傳送到控制器,在控制器_initialize方法中把傳遞過去的SESSION資料設定為當前會話的SESSION,這樣就可以通過驗證了,但是,這裡需要注意一條,重新設定SESSION必須要放在執行驗證登陸函式的前邊,否則無效,因為如果登陸驗證不通過,那麼後邊的程式碼就都不會執行了;

客戶端(ThinkPHP上傳檔案模板)程式碼

js程式碼

$(function() {
$('#file_upload').uploadify({
'formData' : {
'session_name': "<?php echo $_SESSION['session_name']; ?>",
},
//後邊對於解決本問題無關程式碼省略。。。
})
}


伺服器端(ThinkPHP控制器)程式碼


php程式碼

//初始化執行
publicfunction _initialize(){
//此處為解決Uploadify出現http 302錯誤 重新設定SESSION
if(isset($_POST['session_name'])) {
$_SESSION['session_name'] = $_POST['session_name'];
}
//執行登陸驗證檢測函式
$this->powerverify();
}

————————————————
版權宣告:本文為CSDN博主「一夜長風」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/wlzx120/article/details/71598676

前段時間介紹過jquery uploadify上傳外掛的使用方法,我在使用中遇到過Http Error 302錯誤問題,應該會有很多人在使用中遇到過,在此記錄下來:
首 先http 302是請求被重定向的意思,這就很容易理解了,如果你的uploadify處理上傳指令碼有session驗證,就會出現此錯誤,因為flash在執行 post請求的時候沒有包含cookie資訊,而伺服器的session會根據客戶端的cookie來得到SESSIONID。沒有提交cookie自然 就不能獲取到session,然後uploadify就返回了302(請求被重定向)的錯誤。
解決辦法當然是把session_id的值傳到服務端:

<script>
$(document).ready(function(){
$('#file_upload').uploadify({
'uploader':'uploadify/uploadify.swf',
'script':'uploadify.php',
'folder':'uploads/file',
'formData':{'session':'<?phpechosession_id();?>'},
'onComplete':function(event,ID,fileObj,response,data){
alert(response);
}
});
});
</script>



然後在伺服器端session驗證之前:

if(isset($_POST['session'])){
session_id($_POST['session']);
session_start();//注意此函式要在session_id之後
}



當然,你也可以直接在url中將session id傳過去。

TP框架uploadify HTTP 302 錯誤如何解決?

在核心類資料夾裡下的Conf/convention.php中 將VAR_SESSION_ID開啟(建議在模組的conf檔案中新增配置,如在Admin模組下的Conf/config.php中新增 'VAR_SESSION_ID' => 'session_id',)

在程式碼中傳遞session_id引數

參考:http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/

jquery上傳外掛uploadify 報錯http error 302 解決方法之一

前段時間用到jquery上傳外掛uploadify時,始終出現系統報出http error 302的錯誤。

網上大量蒐集資訊,基本上都是說session值丟失的問題,根據網友提供的解決方案進行修改,問題並沒有解決。

因此,不排除這是解決302錯誤的解決方法之一,但是我接下來提出另一解決方案,考慮到非同步傳輸的問題,供大家參考(反正我是成功了)。

首先是uploadify初始化

$(function() {
$('#projectfile').uploadify({
'swf' : '${ctxStatic}/scripts/jqext/uploadify/uploadify.swf',
'uploader' : '${ctx}/utmmanager/utm/insert',

//session的方案,就是在此uploader的值中新增:JSESSIONID=${pageContext.session.id},

'auto' : true, 並且增加一行'formData' :{'JSESSIONID':"${pageContext.session.id}"},
'buttonText' : '匯入',
'multi' : false,
'fileObjName' : 'file',
'method' :'post',
'onUploadSuccess' : function(file,data,response) {
var json_data=eval("("+data+")");
alert("<br>成功匯入條目數:"+json_data.successLen+"<br>失敗匯入條目數://此處需要返回的是json資料,

"+json_data.errorLen+"<br>匯入失敗條目:<br>"+json_data.errorData);不是跳轉路徑。具體看下面分析。
},
'onUploadError' : function() {
alert("失敗");
}
});
});

其次是Controller方法:

需要新增@ResponseBody

@responsebody表示該方法的返回結果直接寫入HTTP response body中,一般在非同步獲取資料時使用。

在使用@RequestMapping後,返回值通常解析為跳轉路徑,加上@responsebody後返回結果不會被解析為跳轉路徑,

而是直接寫入HTTP response body中。比如非同步獲取json資料,加上@responsebody後,會直接返回json資料。

作用:

該註解用於將Controller的方法返回的物件,通過適當的HttpMessageConverter轉換為指定格式後,

寫入到Response物件的body資料區。

時機:

返回的資料不是html標籤的頁面,而是其他某種格式的資料時(如json、xml等)使用;