문제

Uploadify를 사용하고 있으며 PHP 파일에서 세션을 설정할 수 없습니다. 내 스크립트는 다음과 같습니다.

    $("#uploadify").uploadify({
        'uploader'       : '/extra/flash/uploadify.swf',
        'script'         : '/admin/uploads/artistsphotos',
        'scriptData'     : {'PHPSESSID' : '<?= session_id(); ?>'},
        'cancelImg'      : '/images/cancel.png',
        'folder'         : '/img/artists',
        'queueID'        : 'fileQueue',
        'auto'           : false,
        'multi'          : true,
        'onComplete'     : function(a, b, c, d, e){

        },  
        'onAllComplete': function(event,data){
            $bla = $('#art').find(':selected',this);
            $fi  = $bla.val();
             $.ajax({
               type: "POST",
               url: "/admin/uploads/artistsphotosupload",
               data: "artist="+$fi,
               success: function(msg){
                 console.log(msg);
               }
             });
     }
});

그리고 내가 시도하면 PHP에서 :

$_SESSION['name'] = 'something';

다른 파일로 액세스 할 수 없으며 session_start ()가 있습니다. 솔루션을 활성화 했습니까?

도움이 되었습니까?

해결책

일반적으로 세션 ID는 게시물에서 읽지 않습니다. 당신은 이것을 할 수 있습니다 :

$_COOKIE['PHPSESSID'] = $_POST['PHPSESSID'];
session_start();

다른 팁

Uploadify에는 Flash Player가 작성한 자체 세션 ID가 있기 때문에이를 해결할 수 없습니다. 다시 말해 Flash Player는 업로드 스크립트에 새 사용자로 액세스하고 새 세션을 얻습니다. 이를 해결할 수있는 유일한 방법은 현재 Page Session_ID를 게시물을 통해 업로드 스크립트로 전달하는 것입니다.

특히 이미 로그인을위한 세션 지향 PHP 백엔드가있는 경우 구현하기가 훨씬 쉬운 솔루션을 찾았습니다.

jQuery 문에 다음 코드를 작성하십시오.

'script'    : '/upload.php?<?= session_name(); ?>=<?= session_id(); ?>',

현재 세션 이름과 세션 ID를 마술처럼 첨부합니다.

이것은 효과가 있지만 보안 관점에서 볼 때 실제로 나쁜 관행입니다. 이를 통해 유효한 SessionID를 가진 사람은 SessionID를 변경하여 해당 세션을 가장 할 수 있습니다. 비밀 키 (백엔드 코드에만 알려진)와 함께 SessionID의 기본 동기 암호화조차 수행 한 다음 Upload.php 스크립트에서 해독하는 것이 좋습니다.

현재 업로드 + PHP 세션과 비슷한 문제가 있습니다.

Error_Log () 사용 Uploadify Flash 앱이 파일 데이터를 서버로 보내면 올바른 세션 _id를 업로드 스크립트로 전달하는 것을 모니터링 할 수 있습니다.

'scriptData': { 'session_id': session_id},

(Session_ID 이전 세트 : var session_id = '';)

따라서 예, 내 페이지의 세션 ID와 업로드 스크립트의 세션 ID가 실제로 동일인지 확인할 수 있습니다.

그러나 스크립트가 실행되고 세션을 시작하면 다음과 같이 세션을 시작합니다.

session_id ($ session_id); session_start ();

어떻게 든 모든 세션 데이터가 파괴되었습니다 (또한 세션 데이터를 배열로 설정하여 각 요청에 따라 데이터를 새로 고칠 수 있고 업로드를 사용하면 삭제됩니다).

나는 이것을 디버깅하는 방법에 대한 단서가 없다 :/

편집 : 수호신은 세션을 파괴 할 수 있습니다.

http://www.uploadify.com/forum/viewtopic.php?f=7&t=2062

Uploadify 구현을 통해 외부 .js 파일 전에 이것을 추가하십시오.

<!-- Get sesssionId -->
 <script type="text/javascript" charset="utf-8">
  var sessionId = "<?php echo session_id(); ?>";
 </script>

그런 다음 업로드 스크립트에 추가하십시오.

$('#uploadify').uploadifySettings('scriptData', {'sessionId': sessionId});

PHP 업로드 스크립트에는이 문제가 필요합니다.

// Start session
 session_id($_POST['sessionId']);
 session_start();

다 끝났어!

보안과 방법 모두에 관한 모든 훌륭한 답변을 읽은 후, 나는 문제에 대해 나만의 방식으로 일했으며 다른 사람들의 이익을 위해 여기에 게시하겠습니다. 솔루션을 위해 바닥으로 건너 뛰십시오. 모든 것이 중요합니까? ;).

Uploadify는 자체 기본 세션을 사용합니다 ...

이는 업로드 화.php에 액세스 할 때 이전에 저장 한 세션 변수에 액세스 할 때 현재 (uploadify) 세션에서 액세스 할 수 없다는 성가심입니다. 당신은 본질적으로 당신이 만든 세션과 완전히 관련이없는 세션 객체를보고 있습니다. AAAH, 그래서 우리는 무엇을합니까? JavaScript를 통해 전달합니까?

JavaScript를 통해 세션에 대한 참조를 전달할 수 있지만 JavaScript는 클라이언트 (사용자) 측이기 때문에 사용자는 서버로 전송되기 전에 세션 참조를 변경할 수 있습니다. 그는 자신의 세션 ID를 효과적으로 가짜로 만들 수있었습니다. 이것은 적어도 내 신청서의 경우 실제로 끔찍하게 위험합니다.

해결책...

afaik은 ID에서 참조 할 수없는 Default Session_Start ()를 자체적으로 사용하지 마십시오. 대신, session_start ()를 사용할 때마다 사용하려는 세션에 대한 ID를 설정하십시오 (이제 좋은 관행이라고 생각합니다).

매번 세션을 시작하려고합니다

session_id ( "idhere");

session_start ();

중요 : 각 사용자에게 고유 한 세션을 설정합니다.

세션은 서버와 무모한 포기와 연결되는 다른 모든 클라이언트간에 공유되는 변수입니다. 사이트의 각 개별 사용자마다 고유 한 세션 변수를 저장하려면 Session_ID는 해당 사용자에 비해 완전히 고유 한 동적 ID 여야합니다. 쿠키 또는 더 안전하게 데이터베이스 (사용자의 고유 ID?)에서 액세스 할 수 있습니다.

편집 : 약간의 연구 후에는 기본 세션 (ID없이)이 SessionID "phpsessid"를 사용하는 것으로 보입니다. 따라서 아직 시도하지는 않았지만 Session_ID ( "PhpsSessId")를 설정하지만 UPLOADIFY.PHP에서 세션을 시작하기 전에 문제를 해결할 수 있습니다.

그러나 여전히 플러그인이 같은 세션 내에서 동일한 세션 변수를 사용하는 경우 문제가 발생할 수 있으므로 어쨌든 고유 한 ID로 세션을 만드는 것이 가장 좋습니다.

문서에 레이블 가죽을 넣으십시오 id = "id_usuario_logueado" and value $_SESSION[id]

다음 코드를 작성하십시오 jQuery 성명:

'scriptData': {'id_usuario':$('#id_usuario_logueado').text()},

PHP의 후반에

$id_usuario = $_POST['id_usuario'];

백엔드 스크립트에 인증이 필요하고 리디렉션이 필요한 경우 302 문제가 발생하면 인증이 필요하지 않은 새 컨트롤러 또는 스크립트를 만듭니다.

그런 다음 위의 코드에서 '스크립트'를 변경합니다. ?> ',

그런 다음 백엔드 스크립트에서 전달 된 ID를 확인하고 다른 전략으로 업로드 요청을 인증합니다.

다음은 UPLOADIFY의 직접 답변입니다. 업로드와 함께 세션을 사용합니다

당신의 .php 그것은 ajax라고 부릅니다.

'scriptData': {'<?php echo session_name();?>':'<?php echo session_id();?>'},

그리고 당신의 uploadify.php (수신/저장 프로그램)

$session_name = session_name();

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

2.1.4를 사용하고 있으며 세션 변수에 대한 매력처럼 작동합니다.

$(document).ready(function() {



nombre = $('#uploadify1').val(); //first input

autor = $('#uploadify1').val();   // second one



$("#uploadify").uploadify({

    'uploader'       : UPLOADIFY_URL+'scripts/uploadify.swf',

    'script'         : 'ticket_docs_uploadify.php',

    'cancelImg'      : UPLOADIFY_URL+'cancel.png',

    'folder'         : 'ticket_document_uploads',

    'queueID'        : 'fileQueue',

    'checkScript'    : 'ticket_docs_check.php?nombre='+nombre+'&autor='+autor,

    'fileDesc'       : 'I am testing uploadify',

    'buttonText'     : 'Upload',

    'scriptData'     : {'sessTempTickedId': '<?php echo $_SESSION['sessTempTickedId'];?>', 'pkEmployeeID': '<?php echo $_SESSION['pkEmployeeID'];?>', 'EmployeeDepartment': '<?php echo $_SESSION['EmployeeDepartment'];?>' },

    'auto'           : false,

    'multi'          : true,        

    'onComplete'     : function(a, b, c, d, e){

        //alert(a+b+c+d+e);

    },

    'onAllComplete': function(event,data){

        //something here             alert('asdasd');             alert(json_decode(data));            

    }

});

});



<?php include_once('../../common/inc/connectdb.inc.php');

if (!empty($_FILES))

{

$tempFile = $_FILES['Filedata']['tmp_name'];

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';

//change the file name here



$fileName = time();



$arrFile = pathinfo($_FILES['Filedata']['name']);



$strFileExt = strtolower($arrFile['extension']);



$strFileName = $arrFile['filename'];



$strFileBaseName = $arrFile['basename'];



$fileName = $fileName.'.'.$strFileExt;



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



$sql = "INSERT INTO ticket_documents (fkTicketID,fkEmployeeID,fkDepartmentID,TicketDocumentName,TicketDocumentLabel) VALUES ('".$_POST['sessTempTickedId']."','".$_POST['pkEmployeeID']."','".$_POST['EmployeeDepartment']."','".$fileName."','".$_FILES['Filedata']['name']."')";

mysql_query($sql) or die(mysql_error());



move_uploaded_file($tempFile,$targetFile);

echo "1";

}

?>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top