проблема загрузки сеанса - PullRequest
       8

проблема загрузки сеанса

1 голос
/ 12 сентября 2011

Здравствуйте, я использую Uploadify для загрузки фотографий. Когда пользователь входит в систему, его ID сохраняется в сеансе, но после выгрузки чего-либо с помощью Uploadify его ID удаляется из сеанса, поэтому похоже, что он не вошел в систему.

Я пытался передать его ID с идентификатором сеанса и именем сеанса как scriptData , но он также не работал. Когда пользователь вошел в систему и пытается загрузить sth, после завершения сеанса загрузки ( идентификатор пользователя и имя загруженной фотографии не сохранены). Когда пользователь не вошел в систему, сеанс содержит имя загруженной фотографии ...

Вот .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 ]

3 голосов
/ 03 января 2013

Это сработало для меня:

в вашем коде, отображающем кнопку загрузки файла:

<?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. У меня работает.

Надеюсь, я кому-то помог.

0 голосов
/ 04 ноября 2013

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();
}
0 голосов
/ 12 сентября 2011

Вам доводилось проверять это с помощью Internet Explorer?

0 голосов
/ 12 сентября 2011

Что именно вы используете для создания этого 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 (), выполняемый где-то до запуска кода обработки загрузки примера? Без этого все ваши манипуляции с сеансом исчезнут при выходе из скрипта. Вы должны вызвать session_start () для PHP, чтобы сохранить $ _SESSSION для вас.

Убедитесь, что Uploadify действительно получает правильные имена / идентификаторы сеансов - если он неправильно их получает, тогда ваш код сбросит идентификатор / имя сеанса на что-то отличное от реального сеанса, и вы получите симптомы, которые у вас есть - исчезновение загрузки данных - потому что они вошли в ДРУГОЙ сеанс.

Кроме того, у вас, похоже, нет ЛЮБОЙ обработки ошибок в вашем скрипте, и вы предполагаете, что загрузка прошла успешно. Как минимум, вы должны иметь:

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

То, что массив _FILES не пуст, не означает, что загрузка прошла успешно. PHP по-прежнему будет заполнять как можно больше информации о загрузке, ВКЛЮЧАЯ код ошибки, что означает, что ВСЕГДА будут данные в этом массиве, независимо от того, был ли успешным или неудачным процесс загрузки.

...