2011-09-12 154 views
1

你好我正在使用Uploadify上傳照片。 當用戶登錄,他ID被存儲在會話,但Uploadify上傳任何東西后,他ID從會話中刪除,所以看起來他沒有登錄。uploadify會話問題

我試圖通過他的ID會話ID會話名稱scriptData,但它也沒有工作。當用戶登錄並嘗試上傳時,上傳會話完成後(沒有用戶ID上傳的照片名稱存儲)。 當用戶沒有登錄,會話包含上傳照片名稱 ...

這裏是.js文件:

$(document).ready(function() { 
     $('#fileUpload').uploadify({ 
     'uploader'  : '{/literal}{$PATH_TO_ROOT}{literal}scripts/js/uploadify/uploadify.swf', 
     'script'  : '{/literal}{$URL_PREFIX}{$tc->get('uploadify')}{literal}', 
     'scriptData' : {'PHP_SESS_ID': '{/literal}{$sessionId}{literal}','PHP_SESS_NAME':'{/literal}{$sessionName}{literal}'{/literal}{if $user},'PHP_SESS_UZIV':'{$user->get('Id')}'{/if}{literal}}, 
     'cancelImg'  : '{/literal}{$PATH_TO_ROOT}{literal}scripts/js/uploadify/cancel.png', 
     'fileDataName' : 'Filedata', 
     'fileExt'  : '*.jpg;*.gif;*.png', 
     'fileDesc'  : 'Image Files', 
     'sizeLimit'  : 5242880, // 5x1024x1024 bytes   
     'auto'   : false, 

     'buttonText' : 'VYBERTE FOTKU', 
     'buttonImg'  : '{/literal}{$PATH_TO_ROOT}{literal}scripts/js/uploadify/uploadify-butt-{/literal}{$lang}{literal}.jpg', 
     'rollover'  : true, 
     'width'   : 300, 
     'height'  : 45, 
     'hideButton' : false, 
     'method'  : 'post', 
     'multi'   : false, 

     'onAllComplete' : function(event,data) { 
      window.location.href = '{/literal}{$URL_PREFIX}{$tc->get('photo-uploaded')}{literal}'; 
     } 
     }); 
}); 

這裏是後臺腳本:

if (!empty($_FILES)) { 

    $session_id = $_POST["PHP_SESS_ID"]; 
    $session_name = $_POST["PHP_SESS_NAME"]; 

    session_id($session_id); 
    session_name($session_name); 

    if (isset($_POST["PHP_SESS_UZIV"])) { 
     $user_id = $_POST["PHP_SESS_UZIV"]; 
     $_SESSION['sess_us_id'] = $user_id; 
    } 

    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $targetPath = dirname(dirname(__FILE__)) . '/img/'; 

    $newName = time() . '_' . StripAccent($_FILES['Filedata']['name'], '', false, false); 

    $targetFile = str_replace('//','/',$targetPath) . $newName; 

    $savePic = savePic($targetPath, $newName, -590, -500, 100, $tempFile); 
    $saveThumb = savePic($targetPath, getThumbName($newName), -185, -142, 100, $targetFile); 

    $_SESSION['uploadedPhoto'] = $newName; 
} 

謝謝尋求幫助

編輯:嗯,我發現這段代碼工作s在一個,但不是其他服務器...

回答

0

什麼是你用來生成此Javascript?

'scriptData' : {'PHP_SESS_ID': '{/literal}{$sessionId}{literal}','PHP_SESS_NAME':'{/literal}{$sessionName}{literal}'{/literal}{if $user},'PHP_SESS_UZIV':'{$user->get('Id')}'{/if}{literal}}, 

這是從PHP迴應出來嗎? $ sessionID,$ user,$ PATH_TO_ROOT等等被定義在哪裏?

是否有一個session_start()在您的示例上傳處理代碼啓動之前的某處執行?沒有這些,當腳本退出時,所有會話操作都將消失。您必須調用PHP的session_start()才能爲您保留$ _SESSSION。

請確保Uploadify實際上獲取正確的會話名稱/ ID - 如果它們弄錯了,那麼您的代碼會將會話ID /名稱重置爲除真實會話之外的其他內容,最終會導致隨着你的症狀 - 消失的上傳數據 - 因爲它進入了一些OTHER會話。

此外,您似乎沒有任何錯誤處理在您的腳本並假定上載成功。至少你應該有:

if ($_FILES['Filedata']['error'] === UPLOAD_ERR_OK) { 
    ... process upload ... 
} else { 
    die("Upload failed with error code #" . $_FILES['Filedata']['error']); 
} 

僅僅因爲_FILES數組不是空的並不意味着上傳成功。 PHP仍然會盡可能多地填寫關於上傳的信息,包括錯誤代碼,這意味着無論上傳的成功/失敗,總是會有數據在該陣列中。

+0

Smarty模板,我試過'start_session()',但一切都沒有改變。 –

0

您碰巧正在使用Internet Explorer進行測試嗎?在你的代碼顯示文件的上傳按鈕

<?php 
session_start(); 
?> 

.... 

$(function() { 
    $('#file_upload').uploadify({ 
     'formData'  : { 
      'PHPSESSID': '<?=session_id()?>' 
     }, 
     'buttonText' : 'Upload', 
     'displayData': 'speed', 
     'swf'  : 'uploadify.swf', 
     'uploader' : 'uploadify.php', 
     'onUploadSuccess' : function(file, data, response) { 
      .... 
     } 
    }); 
}); 

和uploadify

+0

與FF4,最新的Opera,最新的Chrome –

3

這爲我工作。PHP 只是這樣做:

session_id($_POST['PHPSESSID']); 
session_start(); 

,就是這樣,所有的會話數據將在uploadify.php訪問。 適合我。

希望我幫了某人。

+0

有完全相同的問題,uploadify破壞用戶會話,但這很好地修復它。非常感謝。 – paj