Sessiongültigkeit

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

  • Sessiongültigkeit

    Hallo!
    Folgendes Phänomen: Es soll ein Bilderalbum angezeigt werden. Die Bilder werden alle aus einer DB geladen und automatisch verkleinert angezeigt.
    Dazu mal ein wenig Code:
    PHP-Code:
        <?php
    @session_start();

    //Bilddaten laden
        
    if ($_SESSION[logedin])
        {
            if (isset(
    $_GET[id_data]))
            {
                
    $id_data $_GET[id_data];

                include (
    "dbconnect.php");

                
    $result mysql_query("SELECT data FROM picture WHERE id = $id_data");
                
    $row mysql_fetch_row($result);

                
    $data stripslashes($row[0]);

                
    header("Content-type: image/jepg");
                
    header('Content-Disposition: inline');
                echo 
    $data;
                die(
    "");
            }

            
    //Thumbnail anzeigen
            
    if (isset($_GET[id]))
            {
                
    $id $_GET[id];
                
    session_register('logedin');
                
    $_SESSION[logedin]=true;

                
    $image imagecreatefromjpeg("url_zur_seite$PHP_SELF?id_data=$id");
                
    $image ImageThumbnail($image);

                
    header("Content-type: image/jepg");
                
    header('Content-Disposition: inline');
                
    Image($image);
                die(
    "");
            }
        }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Titel der Website</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>

    <body>
    <?php
        
    if ($_SESSION[logedin])
        {
    //Anzeigen aller Bilder
    //Bilder werden mit
    echo "<img src='$PHP_SELF?id=$id'>";
    //angezeigt
    }
    ?>
    </body>
    </html>
    Also sobald sich jemand authentifiziert hat, wird $_SESSION[logedin] auf true gesetzt und es ist möglich die ganzen geschützten Seiten (wie diese hier) zu betrachten.
    Öffnet man nun diese Seite, dann sollten alle Bilder verkleinert angezeigt werden. Man bekommt aber nur lauter Bildhalter mit roten x angezeigt.

    Was hat das ganze jetzt mit Session-Cookies zu tun?
    Gebe ich bei den oberen beiden if-Befehlen, die Abfrage nach $_SESSION[logedin] weg, dann funktioniert es. Konkret geht es deshalb nicht, weil sich die Seite, um Thumbnails zu erstellen, 2x selbst aufruft. Dabei wird beim 2ten Mal irgendwie die Session nicht richtig übergeben werden.
    Möchte ich nur ein Bild in Originalgröße (also ohne es zu verkleinern, d.h. nur einmal sich selbst aufrufen) darstellen, dann funktioniert das auch.

    Meine Frage ist, wo hier der Fehler liegt, bzw. warum die Session beim 2ten Mal nicht richtig "übermittelt" wird.

  • #2
    Re: Sessiongültigkeit

    bild- und HTML-daten mit einer einzigen ressource ausliefern zu wollen, ist und bleibt unfug.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Sessiongültigkeit

      Original geschrieben von Fle&gt;&lt;
      PHP-Code:
      if ($_SESSION[logedin]) 
      Außerdem sind mir hier zwei Anführungszeichen zu wenig...
      [color=black] Important: alt bei <img> ist immer erforderlich · Strings richtig trennen/verbinden · Kiddie-Code hat keine Chance[/color]

      Kommentar


      • #4
        Re: Re: Sessiongültigkeit

        Original geschrieben von tomstig
        Außerdem sind mir hier zwei Anführungszeichen zu wenig...
        das ist aber nicht der grund, warum es nicht funktioniert.
        Ich hab irgendwo mal gelesen, dass hier nicht unbedingt welche stehen müssen... ich find jetzt nur nicht die Stelle wo das war.

        Kommentar


        • #5
          na dann liest das mal: http://www.php.net/manual/en/language.types.array.php
          insbesondere das Kapitel "do's & don'ts"

          Kommentar


          • #6
            Den hier kenn ich nicht:

            Image($image);

            vielleicht mal mit:

            Imagejpeg($image);

            versuchen?
            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


            • #7
              Content-type: image/jepg ... das könnte auch noch ein Problem werden ...
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                Image($image) gibt das Bild zurück. Das kann man am besten mit
                PHP-Code:
                <?php
                echo $data?>
                in der anderen if-Verzweigung vergleichen.

                Wieso sollte dieser Header Probleme machen?

                Fest steht, dass beide Funktionen (ich nenn sie jetzt einmal so), funktionieren. Nur passiert, wenn sich die Seite zum 2ten Mal aufruft, irgendwas mit der Session, weshalb es dann nicht mehr funktioniert.

                Kommentar


                • #9
                  Ist Image() eine eigene Funktion von dir? Im PHP-Manual kann ich nix zu Image() finden. Wenn du ein Jpeg senden willst musst IMHO Imagejpeg() verwenden.

                  Zum header auf den dich goth hingewiesen hat:

                  header("Content-type: image/jepg"); != header("Content-type: image/jpeg");
                  Zuletzt geändert von Quetschi; 08.07.2005, 14:43.
                  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


                  • #10
                    ja, image() ist von mir. macht im grunde nix anderes als
                    "return ImageJPEG($image, false, 100);".
                    Aha, den Fehler im Header hab ich nicht gleich gesehen. Habe es ausgebessert.

                    Kommentar


                    • #11
                      Original geschrieben von Fle&gt;&lt;
                      ja, image() ist von mir. macht im grunde nix anderes als
                      "return ImageJPEG($image, false, 100);".
                      Aha, den Fehler im Header hab ich nicht gleich gesehen. Habe es ausgebessert.
                      Du solltest dir unbedingt noch eine eigene echo-Funktion basteln, ich hätte da schon was fertiges für dich:

                      PHP-Code:
                      <?php

                      function mein_echo($output)
                      {
                         echo 
                      $output;
                      }

                      mein_echo("Mein mein_echo() ist besser als das von PHP!");

                      ?>
                      Funktionierts jetzt mit dem richtigen Header?
                      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


                      • #12
                        Also um deiner Belustigung Einhalt zu gewähren: Ich hab die Thumbnailerstellung aus einem Tutorial. Dieses behandelt aber nicht nur jpeg Bilder, sondern auch andere Formate, deshalb gibt es eine eigene Image Funktion, die, je nach Bildformat, die richtige Funktion wählt. Da ich aber vorerst nur mit jpegs arbeiten will, habe ich den Rest in der Funktion auskommentiert.

                        Und NEIN, es geht natürlich immer noch nicht.

                        Kommentar


                        • #13
                          Dann mach mal folgendes:

                          1. Die header() vor der JPG-Ausgabe mal auskommentieren.

                          2. Das Script direkt im Browser so aufrufen, dass es ein Bild ausgeben müsste.

                          3. Mal schauen was da so kommt.
                          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


                          • #14
                            Wenn ich die Header auskommentiere, macht das komischerweise gar keinen Unterschied im Verhalten der Seite. Also ich kann immer noch das Bild in Originalgröße anzeigen: seite.php?id_data=nr.
                            Das funktioniert aber trotzdem nicht: seite.php?id=nr.
                            Wenn ich jedoch die Abfrage nach der Session weggebe, funktioniert es.

                            Folgende Theorie habe ich jetzt aufgestellt:
                            Wenn eine PHP Seite ein Bild zurückgibt, dann können keine (oder werden keine) Session-Informationen mit übermittelt. Deshalb ist es in diesem Fall möglich einmal sich selbst aufzurufen (jetzt werden ja noch die Session-Infos mitgegeben) und auf die Gültigkeit der Session zu überprüfen. Jetzt wird aber ein Bild zurückgegeben, sollte es jetzt noch einmal zu einem Aufruf kommen, dann können, auf Grund der Bilddaten, keine Sessioninformationen übermittelt werden.

                            Kommentar


                            • #15
                              Die Sessiondaten werden vom Browser versandt, der kann zu dem Zeitpunkt wo er die Request-Header schnürt noch gar nicht wissen, dass er gleich ein Bild empfangen wird.
                              (Nun könnte er das zwar durch den ersten Aufruf gelernt haben, aber das wäre dann ein höchst depperter Browser. Probier mal einen anderen.)

                              Kommentar

                              Lädt...
                              X