uploadify会话问题

时间:2011-09-12 15:38:21

标签: php session uploadify

您好我正在使用Uploadify上传照片。 当用户被记录时,他的 ID 存储在会话中,但在通过Uploadify上传任何内容后,他的 ID 将从会话中删除,因此看起来他没有登录。

我尝试将会话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;  
}

感谢您的帮助

编辑:我发现这个代码适用于一个,但不是其他服务器......

4 个答案:

答案 0 :(得分:3)

这对我有用:

在您的代码中显示文件上传按钮:

<?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.php 这样做:

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

就是这样,所有会话数据都可以在uploadify.php中访问。 适合我。

希望我能帮助别人。

答案 1 :(得分: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 /名称重置为真实会话之外的其他内容,并且您最终会得到你有的症状 - 消失上传数据 - 因为它进入了其他会话。

同样,您的脚本中似乎没有任何错误处理并假设上传成功。至少你应该:

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

仅仅因为_FILES数组不为空并不意味着上传成功。 PHP仍然会尽可能多地填写有关上传的信息,包括错误代码,这意味着无论上传的成功/失败,都会始终存在该数组中的数据。

答案 2 :(得分:0)

您是否恰好使用Internet Explorer进行测试?

答案 3 :(得分:0)

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

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

在Uploadify中:

//uploadify.php
$session_name = session_name();

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