Question

J'utilise Uploadify, et je ne peux pas définir des sessions dans mes fichiers php, mon script ressemble à ceci:

    $("#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);
               }
             });
     }
});

Et en php si je tente:

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

Je ne peux pas y accéder dans un autre file.and j'ai session_start (); activé Toute solution?

Était-ce utile?

La solution

En général, l'ID de session ne sera pas lu du POST. Vous pouvez faire ceci:

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

Autres conseils

vous ne pouvez pas résoudre parce que Uploadify a sa propre ID de session qui est créé par flash player. En d'autres termes, le lecteur flash accéder au script Uploadify en tant que nouvel utilisateur et obtient une nouvelle session. La seule façon que vous pouvez résoudre ce problème est de passer id_session de la page courante par la poste au script Uploadify.

J'ai trouvé une solution qui est beaucoup plus facile à mettre en œuvre, surtout si vous avez déjà un backend PHP orienté session pour la connexion, etc:.

il suffit d'écrire le code suivant dans la déclaration jQuery:

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

qui par magie joindre votre nom actuel de la session et votre identifiant de session.

Cela peut fonctionner, mais du point de vue de la sécurité est vraiment mauvaise pratique. Cela permettrait à toute personne ayant un idSession valide pour usurper l'identité de cette session en changeant la sessionid. Il serait préférable de le faire même un cryptage synchrone de base de la sessionid avec une clé secrète (connue uniquement du code back-end), puis le déchiffrer sur le script upload.php.

J'ai actuellement un problème similaire avec des sessions de Uploadify + PHP.

Utilisation error_log () Je peux surveiller que lorsque l'application flash Uploadify envoie les données de fichiers sur le serveur, il passe le session_id correct au script de téléchargement:

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

(SESSION_ID définie précédemment: var session_id = '';)

Alors, qui me permet de vérifier que oui, l'identifiant de session pour mes pages et l'identifiant de session pour le script Uploadify sont en fait le même.

Mais, quand le script est exécuté et je commence la session par:

session_id (id_session $); session_start ();

D'une certaine manière toutes les données de session est détruit (je l'ai fixeraient également été données de session dans un tableau afin que je puisse rafraîchir et regarder les données augmentent à chaque demande, puis quand je l'utilise Uploadify, il est effacé).

Je n'ai pas la moindre idée sur la façon de déboguer ceci: /

edit: suhosin peut être en train de détruire la session:

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

Ajoutez ce fichier avant vos .js externes avec la mise en œuvre Uploadify.

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

Ensuite, ajoutez ce au script Uploadify.

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

script PHP upload a besoin.

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

Tout est fait!

Après avoir lu toutes les brillantes réponses concernant à la fois la sécurité et la méthode, j'ai travaillé ma façon de contourner le problème, et je vais le poster ici pour le bénéfice des autres. Passer au fond de la solution, il est tout ce qui compte non? ;.)

Uploadify utilise sa propre session par défaut ...

Ceci est un ennui qui signifie que lors de l'accès uploadify.php, toutes les variables de session que vous avez précédemment enregistrés ne peuvent pas être accessibles à partir de la session en cours (Uploadify). Vous êtes à la recherche essentiellement à un objet de session qui est sans aucun rapport avec la session que vous avez fait. Aaah, alors qu'est-ce que nous faisons, passer à travers le javascript?

« peut » passer une référence à la session par javascript, mais javascript est côté client (utilisateur), et à cause de cela, un utilisateur peut modifier la référence de la session avant qu'il ne soit envoyé au serveur. Il pourrait effectivement faux son ID de session. Ceci est en fait épouvantablement dangereux, au moins dans le cas de ma demande.

La solution ...

Ne pas utiliser le session_start par défaut () sur son propre, qui ne peut pas être AFAIK référencé par un ID. Au lieu de cela, chaque fois que vous utilisez session_start (), définissez un ID pour la session que vous souhaitez utiliser, (que je me sens maintenant est une bonne pratique peu importe).

Chaque fois que vous souhaitez démarrer une session

id_session ( "IDHere");

session_start ();

IMPORTANT:. Réglage d'une session unique pour chaque utilisateur

Sessions sont variables partagées entre le serveur et tous les autres clients connexion avec insouciance. Si vous souhaitez stocker des variables de session qui sont propres à chaque utilisateur de votre site, le session_id doit être une sorte d'identité dynamique tout à fait unique par rapport à cet utilisateur. On peut y accéder à partir d'un cookie ou plus en toute sécurité une base de données (ID unique de l'utilisateur?).

Edit: Après un peu de recherche, il semble que les sessions par défaut (sans ID) utilisent le idSession « PHPSESSID ». Donc, même si je ne l'ai pas encore essayé, la mise session_id ( « PHPSESSID »), avant de commencer la session uploadify.php peut résoudre le problème aussi.

Mais encore, si un plugin se trouve juste à utiliser une variable de session identique à vous à l'intérieur de la même session, les problèmes pourraient surgir, il est probablement préférable de faire votre session avec son propre ID unique de toute façon.

mettre un cache d'étiquette dans le document avec id = "id_usuario_logueado" and value $_SESSION[id]

il suffit d'écrire le code suivant dans l'instruction jQuery:

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

plus tard en php

$id_usuario = $_POST['id_usuario'];

J'ai trouvé la solution, si votre script a besoin backend d'authentification et vous redirige obtiendrez le problème 302 - il suffit de créer un nouveau contrôleur ou d'un script qui n'a pas besoin d'authentification

.

Ensuite, à partir du code ci-dessus le changement 'Script': '/ admin / uploads / artistsphotos', À 'Script':? / Admin / upload-non protégés / artistsphotos / id = »,

Ensuite, dans votre script back-end simplement vérifier l'identifiant qui a été adoptée et authentifier la demande de téléchargement avec une stratégie différente.

Voici la réponse directement à partir Uploadify: Utiliser les sessions avec Uploadify

Dans votre .php qui appelle la ajax:

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

Et dans votre uploadify.php (réception / programme d'économie)

$session_name = session_name();

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

J'utilise 2.1.4, et il fonctionne comme un charme pour les variables de session.

$(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";

}

?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top