首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

CodeIgniter 整合 SWFUpload 最佳實踐:解決 MIME 識別與 Session 丟失兩大核心難題

     編輯:PHP 綜合知識

難題一:SWFUpload 文件 MIME 均為 application/octet-stream 導致 CI 驗證失敗

解決方案

  1. 視圖引入 SWFUpload JS。
  2. 控制器 $this->upload->do_upload('Filedata')(SWFUpload 固定發送字段名)。
  3. 修改 application/config/mimes.php,為允許的圖片類型追加 application/octet-stream:
'gif'  => array('image/gif', 'application/octet-stream'),
'jpeg' => array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'jpg'  => array('image/jpeg', 'image/pjpeg', 'application/octet-stream'),
'png'  => array('image/png', 'image/x-png', 'application/octet-stream'),

難題二:帶 Session 驗證的後台,上傳後 Session 丟失(用戶被踢出登錄)

根因

Flash 請求的 User-Agent 與瀏覽器不同,CI sess_match_useragent = TRUE 導致判定為不同客戶端,創建新 Session。

方案對比

方案做法安全性推薦度
關閉 UA 檢查$config['sess_match_useragent'] = FALSE;降低,易受 Session 劫持⭐
Token 驗證(推薦)上傳 URL 攜帶 Token,後端驗證;上傳控制器**不加載 Session 庫**高,業務級驗證⭐⭐⭐

Token 方案實現架構

// 1. 基礎控制器分離
class MY_Controller extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->library('session'); // 後台控制器繼承此類,自動驗證登錄
    }
}

// 2. 上傳控制器直接繼承 CI_Controller,不經過 MY_Controller
class Upload extends CI_Controller {
    public function do_upload() {
        // 驗證 post_params 傳來的 token
        $token = $this->input->post('token');
        if (!$this->verify_token($token)) exit('Invalid token');
        // 執行上傳邏輯...
    }
}

// 3. 前端 SWFUpload 設置 post_params
var swfu = new SWFUpload({
    // ...
    post_params: { "token": "generate_upload_token(); ?>" },
    upload_url: ""
});

總結

MIME 問題通過配置修復;Session 丟失通過「上傳端點不加載 Session + Token 業務驗證」徹底解決,兼顧安全與體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved