今天在弄一個圖片上傳的功能,發現一個一個圖片去點非常累,於是下載了一個最新的swfupload,結果用不了>.<,但奇怪的是官方演示裡的又能用,沒辦法,把他演示上的全拔了下來。
放到yii裡去用,結果上傳的時候老提示302,網上找到一篇文章,說是session的問題(因為我的後台就是用session控制的),文章原文如下:
swfUpload提示302錯誤原因及解決辦法
在使用swfupload上傳文件的時候,老提示302。大概知道原因是因為驗證失敗自動跳轉了。
swfuplaod在上傳時,會新開一個進程,和原來的進程不一致,要解決這個問題,需要指定session_id,然後在登錄頁面判斷,如果有 post過來的session_id,那麼就用函數session_id( $_POST['PHP_SESSIONID'])指定一下。
上傳頁的JS裡面,可以獲取當前的SESSION_ID的。
例如上傳頁的JS中:
post_params: {“PHPSESSID”: “<?php echo session_id(); ?>”},
在驗證的判斷頁中:
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
}(這一段是網上的注釋:在帶有Session驗證的網站後台中SWFUpload無法正常工作,這是因為SWFUpload在上傳時相當於重新開辟 了一個新的Session 進程,因此無法與原有程序的Session保持一致,這就需要在上傳時傳遞原有程序的SessionID,根據它來“找回”其應有的Session。)
參照他的方法試了一下,不行。
後來想到,既然是跟session有關,那麼我在驗證前將session傳遞過來會如何?於是將:
if (isset($_POST["PHPSESSID"]))
{
session_id($_POST["PHPSESSID"]);
}
這段代碼寫到了 BackendModule的init()方法裡,測試通過!