Frage

Ich verwende Uploadify und ich kann keine Sitzungen in meinen PHP -Dateien festlegen. Mein Skript sieht so aus:

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

Und in PHP, wenn ich es versuche:

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

Ich kann in einer anderen Datei nicht darauf zugreifen. Und ich habe Session_start (); Lösungen aktiviert?

War es hilfreich?

Lösung

Normalerweise wird die Sitzungs -ID nicht aus dem Beitrag gelesen. Sie könnten das tun:

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

Andere Tipps

Sie können dies nicht lösen, da Uploadify eine eigene Sitzungs -ID hat, die von Flash Player erstellt wird. Mit anderen Worten, der Flash Player zugreift auf das Uploadify -Skript als neuen Benutzer und erhält eine neue Sitzung. Die einzige Möglichkeit, dies zu lösen, besteht darin, die aktuelle Seite Session_ID über Post an das Uploadify -Skript zu übergeben.

Ich habe eine Lösung gefunden, die viel einfacher zu implementieren ist, insbesondere wenn Sie bereits über ein Sitzungs-orientiertes PHP-Backend für die Anmeldung usw.:

Schreiben Sie einfach den folgenden Code in die Jquery -Anweisung:

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

Dies wird Ihren aktuellen Sitzungsnamen und Ihre Sitzungs -ID auf magische Weise angeschlossen.

Dies mag funktionieren, aber aus Sicherheitssicht ist wirklich eine schlechte Praxis. Dies würde es jedem mit einer gültigen Sitzung ermöglichen, diese Sitzung auszugeben, indem sie nur die Sitzung geändert hat. Es wäre besser, selbst eine grundlegende synchrone Verschlüsselung der Sitzung mit einem geheimen Schlüssel (nur dem Backend -Code bekannt) zu erstellen und sie dann im Skript upload.php zu entschlüsseln.

Ich habe derzeit ein ähnliches Problem mit Uploadify + PHP -Sitzungen.

Verwenden von ERRAGE_LOG () Ich kann überwachen, dass bei der Uploadify -Flash -App die Dateidaten an den Server sendet, die richtige Session_id an das Upload -Skript übergeben:

'scriptData': {'Session_ID': Session_id},

(Session_ID ENDE SET: var seision_id = '';)

Damit kann ich also überprüfen, ob die Sitzungs -ID für meine Seiten und die Sitzungs -ID für das Uploadify -Skript tatsächlich gleich sind.

Aber wenn das Skript ausgeführt wird und ich die Sitzung beginne von:

Session_id ($ session_id); Session_Start ();

Irgendwie werden alle Sitzungsdaten zerstört (ich habe auch Sitzungsdaten in ein Array festgelegt, damit ich die Daten mit jeder Anforderung aktualisieren und beobachten kann.

Ich habe keine Ahnung, wie ich das debuggen soll:/

Bearbeiten: Suhosin kann die Sitzung zerstören:

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

Fügen Sie dies vor Ihrer externen .js -Datei mit der Uploadify -Implementierung hinzu.

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

Fügen Sie dies dann dem Uploadify -Skript hinzu.

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

PHP -Upload -Skript benötigt dies.

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

Alles erledigt!

Nachdem ich alle brillanten Antworten auf Sicherheit und Methode gelesen habe, habe ich mich mit dem Problem befasst, und ich werde es hier zum Nutzen anderer veröffentlichen. Wenn Sie nach unten gehen, um die Lösung zu erhalten, ist alles, was zählt, richtig? ;).

Uploadify verwendet seine eigene Standardsitzung ...

Dies ist ein Ärger, der bedeutet, dass beim Zugriff auf uploadify.php alle Sitzungsvariablen, die Sie zuvor gespeichert hatten, nicht über die aktuelle (Uploadify-) Sitzung zugegriffen werden können. Sie betrachten im Wesentlichen ein Sitzungsobjekt, das völlig nichts mit der von Ihnen durchgeführten Sitzung zu tun hat. Aaah, also was machen wir, gehen es durch das JavaScript?

Sie können einen Verweis auf die Sitzung über JavaScript übergeben, aber JavaScript ist eine Client -Seite (Benutzer). Aus diesem Grund kann ein Benutzer die Sitzungsreferenz ändern, bevor er an den Server gesendet wird. Er konnte seinen Sitzungs -ID effektiv vortäuschen. Dies ist eigentlich furchtbar gefährlich, zumindest bei meiner Bewerbung.

Die Lösung...

Verwenden Sie nicht die Standard -Session_start () für sich, auf die Afaik nicht durch eine ID verwiesen werden kann. Setzen Sie stattdessen jedes Mal, wenn Sie Session_Start () verwenden, eine ID für die Sitzung, die Sie verwenden möchten (was ich jetzt für eine gute Praxis ist).

Jedes Mal, wenn Sie eine Sitzung beginnen möchten

Session_id ("idhere");

Session_Start ();

WICHTIG: Setzen Sie eine eindeutige Sitzung für jeden Benutzer.

Sitzungen sind Variablen, die zwischen dem Server und jedem anderen Client geteilt werden, der sich mit rücksichtsloser Hingabe verbindet. Wenn Sie Sitzungsvariablen speichern möchten, die für jeden einzelnen Benutzer Ihrer Website eindeutig sind, muss die Session_ID eine völlig eindeutige dynamische ID für diesen Benutzer sein. Dies kann von einem Cookie oder sicherer auf eine Datenbank (die eindeutige ID des Benutzers?) Zugreifen.

Bearbeiten: Nach ein wenig Nachforschungen scheint es, dass Standardsitzungen (ohne ID) die Sitzung "phpSessid" verwenden. Obwohl ich es noch nicht ausprobiert habe, kann es auch das Problem beheben, vor dem Starten der Sitzung in uploadify.php Session_id ("phpSessid") zu setzen.

Aber wenn ein Plugin in derselben Sitzung eine identische Sitzungsvariable für Sie verwendet, können Probleme auftreten. Es ist also wahrscheinlich am besten, Ihre Sitzung mit seiner eigenen einzigartigen ID ohnehin zu machen.

Legen Sie ein Etikettblender in das Dokument mit id = "id_usuario_logueado" and value $_SESSION[id]

Schreiben Sie einfach den folgenden Code in die jQuery Aussage:

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

später in PHP

$id_usuario = $_POST['id_usuario'];

Ich habe die Lösung gefunden. Wenn Ihr Backend -Skript Authentifizierung und Weiterleitungen benötigt, erhalten Sie das Problem von 302. Erstellen Sie einfach einen neuen Controller oder ein neues Skript, für das keine Authentifizierung erforderlich ist.

Dann aus dem obigen Code ändere 'script': '/admin/uploads/artistSphotos', in 'script': '/admin/uploads-nicht-geschützt/künstlerphotos/id = <? Php echo md5 ($ theUserSessionId); ?> ',

Überprüfen Sie dann in Ihrem Backend -Skript einfach die ID, die übergeben wurde, und authentifiziert die Upload -Anfrage mit einer anderen Strategie.

Hier ist die Antwort direkt von Uploadify: Verwenden von Sitzungen mit Uploadify

In deiner .php Das nennt den Ajax:

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

Und in deinem uploadify.php (Empfangs-/Sparenprogramm)

$session_name = session_name();

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

Ich verwende 2.1.4 und es funktioniert wie ein Zauber für Sitzungsvariablen.

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

}

?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top