PHP SESSION Problem... mehrere Verbindungen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP SESSION Problem... mehrere Verbindungen

    Hallo Forum,

    ich habe gerade ein merkwürdiges Session Problem.

    Und zwar habe ich eine passwortgeschütze Seite, die über Sessions verwaltet wird. Das funktioniert soweit auch ganz gut.

    Nun habe ich dort eine verzeichnis-listing funktion mit eingebaut.
    Von ihr aus verlinke ich auf die download.php die im prinzip prüft ob der benutzer...

    1. über die vorherige session (aus der index.php) kommt
    2. die datei die geladen werden soll in dem vorgegebenen verzeichnis liegt

    Das funktioniert soweit auch super. Das Problem ist nur, wenn ich eine größere Datei downloade und dann weiter auf der vorherigen seite arbeiten möchte dann passiert garnichts...

    ...erst wenn ich den download abbreche oder er beendet ist geht es weiter.

    Habe nun den versuch gemacht die session vor dem download zu zerstören und siehe da. Es funktioniert.

    Das ist aber nicht des Rätsels Lösung, denn ich müsste mich ja dann neu anmelden.

    Der entscheidende part meiner download.php
    PHP-Code:
            session_start();

    // hier steht der code zum verifinzieren...dann kommt

           // session_destroy(); // das habe ich testweisse noch versucht.
            
    header('Pragma: public');
            
    header('Expires: 0');
            
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            
    header('Content-Type: ' getmimetype($file));
            
    header('Content-Disposition: attachment; filename=' basename($file) . ';');
            
    header('Content-Length: ' filesize($file));

            
    readfile($file); 
    Hat irgendwer dazu eine Idee?

    Gruß,
    Thomas
    Zuletzt geändert von aLiEnTxC; 13.04.2005, 17:05.

  • #2
    Re: PHP SESSION Problem... mehrere Verbindungen

    vage vermutung:

    dadurch, dass dein downloadscript noch "beschäftigt" ist, wird auch die session-datei noch von dieser scriptinstanz "reserviert"/gesperrt, so dass weitere scripte, die ebenfalls was von der session-datei wollen, darauf keinen zugriff bekommen ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      hmmm....

      wäre es möglich dass er die readfile zeile in ein eigenes Skript auslagert, welches er dann mit exec() aufruft und in den Hintergrund schiebt?? Damit dürfte doch das Skript schnell beendet sein und die Blockierung sollte aufgehoben sein....

      ???

      ... war wohl ein Fehlgedanke, dann kriegt er ja die Ausgabe nicht mehr an den Browser....
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        hmm... das habe ich mir auch schon gedacht...nur wie könnte ich das umgehen?

        Kommentar


        • #5
          Probier mal folgendes:

          Lies deine Datei in eine Variable ein, gib sie mit echo aus und setz ein flush(); hinter die Ausgabe.
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #6
            uff.. das ist glaub ich keine so dolle idee, denn die dateien sind meistens größer 40mb und viel mehr.

            Das wurde den webserver sprengen :-(

            EDIT:

            und zum testen kommen kleine dateien nicht in frage, denn diese sind zu schnell abgearbeitet/gedownloadet

            Zuletzt geändert von aLiEnTxC; 13.04.2005, 16:35.

            Kommentar


            • #7
              hola, 40MB?? ... ok, keine sehr gute Idee...

              Diese Dinge sind jetzt leider auch ned grad mein Spezialgebiet, aber einen Gedanken hätt ich noch:

              Könnte man den Download nicht auch mit header("Location:...."); auslösen??
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar


              • #8
                ne, die dateien liegen ausserhalb des document root und sollten dort auch bleiben, da sonnst ja jeder zugriff darauf hätte und wegen der zweitmöglichkeit per ftp zuzugreifen... ich weiss ist halt ein spezielles konstrukt.

                Aber da ich nicht überall ein ftp client installieren will mache ich diese oberfläche.
                Zuletzt geändert von aLiEnTxC; 13.04.2005, 17:02.

                Kommentar


                • #9
                  ... ich habe bis ins detail genau die selben voraussetzungen und ein identische problem!

                  (Bin daher auch auf der Lauer nach Lösungen, konnte bisher noch keine Erfolge bei dieser Problematik erzielen...)

                  Kommentar


                  • #10
                    noch ein Gedanke:

                    der Download dürfte doch durch den Klick auf einen Link gestartet werden, oder??

                    wie wäre es, eine 2. Session zu eröffnen in der du aber alle Variablen aus der 1. Session übernimmst und den Download dann in einem neuen Fenster startest??
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Original geschrieben von aLiEnTxC
                      ne, die dateien liegen ausserhalb des document root und sollten dort auch bleiben, da sonnst ja jeder zugriff darauf hätte
                      vorschlag:

                      datei in irgendein temp-verzeichnis innerhalb des document root kopieren, unter einem kryptischen, nicht zu erratenden namen - uniqid() o.ä. helfen.
                      dann per header darauf weiterleiten, den user den download machen lassen.

                      anschließend regelmässig dateien aus dem temp-verzeichnis, die älter sind als x stunden, wieder entfernen.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        ich habe die lösung gefunden.

                        An derstelle an der ich die session zerstören wollte habe ich ein

                        session_write_close()

                        eingefügt und nun funktioniert es..

                        trotzdem danke.

                        Gruß,
                        Thomas

                        Kommentar


                        • #13
                          ... ist bestätigt!!!

                          vielen dank!

                          Kommentar

                          Lädt...
                          X