会话和uploadify

Uff*_*ffo 19 php session jquery uploadify

我正在使用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);
               }
             });
     }
});
Run Code Online (Sandbox Code Playgroud)

在PHP中如果我尝试:

$_SESSION['name'] = 'something';
Run Code Online (Sandbox Code Playgroud)

我无法在另一个文件中访问它.我有session_start(); 激活任何解决方案

小智 11

你无法解决这个问题,因为uploadify有自己的会话ID,由flash播放器创建.换句话说,Flash播放器以新用户的身份访问uploadify脚本并获得新会话.解决此问题的唯一方法是将当前页面session_id通过post传递给uploadify脚本.


Gre*_*reg 8

通常,不会从POST读取会话ID.你可以这样做:

$_COOKIE['PHPSESSID'] = $_POST['PHPSESSID'];
session_start();
Run Code Online (Sandbox Code Playgroud)


小智 7

我找到了一个更容易实现的解决方案,特别是如果你已经有一个面向会话的PHP后端用于登录等等:

只需在jQuery语句中编写以下代码:

'script'    : '/upload.php?<?= session_name(); ?>=<?= session_id(); ?>',
Run Code Online (Sandbox Code Playgroud)

这将神奇地附加您当前的会话名称和您的会话ID.


Tra*_*vis 6

这可能有用但从安全角度来看确实是不好的做法.这将允许具有有效sessionID的任何人仅通过更改sessionid来模拟该会话.最好使用密钥(只有后端代码知道)对sessionid进行基本的同步加密,然后在upload.php脚本上对其进行解密.