關於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參數中定義一個SESSIONID,這樣就可以通過$_POST或$_GET的方法將SESSIONID發送到控制器,在控制器把傳遞過去的SESSIONID設置爲當前會話的SESSIONID,這樣就可以通過驗證了,但是,這裏需要注意一條,重新設置SESSIONID必須要放在執行驗證登陸函數的前邊,否則無效,因爲如果登陸驗證不通過,那麼後邊的代碼就都不會執行了,我之前就犯了這樣的錯誤,將重置SESSION放到了上傳文件處理的函數中,下面貼上詳細的代碼,以供大家參考,有不足之處,望告之,謝謝!

javascript代碼:

$('#file_upload).uploadify({
    // Your normal options here
    formData : { '<?php echo session_name();?>' : '<?php echo session_id();?>' }
});

PHP框架ThinkPHP控制器中的代碼:

$session_name = session_name();

if (!isset($_POST[$session_name])) {
    exit;
} else {
    session_id($_POST[$session_name]);
    session_start();
}


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