session_start() stört das laden eines JPGs/senden eines Headers

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

  • session_start() stört das laden eines JPGs/senden eines Headers

    Hallo,

    ich bins nochmal, ich habe hier schon mein Problem gepostet: Siehe hier. Es geht darum daß beim "Bild speichern unter" Dialog nur noch BMP statt JPG steht und im Eigenschaften Dialog die Bildgröße als -1 Byte und der Typ als "Unbekannt".

    So, mittlerweile weiß ich daß die Zeile session_start() am Anfang des Scriptes welches die Jpgs erzeugt, die Ursache ist, denn wenn ich die weglasse dann geht alles wieder.

    Der Hintergrund:

    Ich habe ein php, in welchem ich per <img src="blabla.php?bild=120310"> JPgs lade. Das hat immer wunderbar geklappt.
    Nun habe ich meine Seite umgestaltet so daß nur angemeldetet USer diese Bilder sehen sollen , das klappt eigentlich auch:

    Beim login wird eine Variable $login auf 1 und eine Variable $user_name mit Session_register(...) in der sesion_registriert.
    In dem blabla.php frage ich dann einfach ab ob diese beiden Vars bekannt sind, wenn ja zeige das Bild ansonsten zeigt er ein kleines JPG mit dem Hinweis "Erst anmelden".

    Das Problem WAR nun, daß mein blabla.script welche in dem <img tag> eingebunden ist, diese beiden Session_variablen wohl nicht kennt, denn es KAM IMMER nur diese kleine JPG mit dem Hinweis.

    Dann habe ich hier gelesen, daß man in jedem Script als erste den session_start() mache soll und dadurch die Vars bekannt werden würden..ich weiß zwar nicht warum aber es geht ! Seit dem sessionn_start() kommt das bild wenn man eingeloggt ist, oder das JPG wenn man nicht eingeloggt ist (ich war der Meinung das ALLE php scripte die session_vars kennen, schließlich werdn sie aus dem Hauptscript geöffnet..?!

    Nungut, aber seither geht eben das speicehrn unter...nur noch als BMP und in den Eigenschaften steht TYP: unbekannt und als Größe -1 Byte, wenn ich session_start am Beginn des Scriptes wieder rausnimm geht der speichenr unter wieder, aber ichseh imemr nur das logo, hier mal das script:

    PHP-Code:
    //der session_start() macht mir die Probleme
    session_start();
    mysql_connect($DBHOST$DBUSER$DBPASS); //Connect to database
    mysql_select_db($DATABASE); //Select database

    $sqlqs_1="SELECT filename from vcdcoverz_".$TABLE." WHERE id=$COVERID";
    $sqlq_1 =    mysql_query($sqlqs_1);
    $sqlr_1=    mysql_fetch_row($sqlq_1);
    $fn=$sqlr_1[0];


    // Hier wird dann eben entschieden welches JPG geladen wird
    if (isset($_SESSION["login"]) && isset($_SESSION["user_name"])) {

    $image="../vcdcoverz/temp/".$TABLE."/".$fn;

    }else{

    $image="../vcdcoverz/stolen.jpg";

    }

    header"Content-type: image/jpeg" );
    @
    readfile$image); 

    ..tja meine Frage ist nun, ob es eine andere Möglichkeit auf die Variablken in der Session zuzugrweifen ohne diesen session_start() zu verwenden...ich weiß daß Titus auch mal gepostet hat, man sollte imemr session_start() machen...ich versteh eh nicht was daß mit meinem jpg-header zu tun hat *seufz*..

    VBin für jeden Tip dankbar.

    Ray

  • #2
    mit den neuen Superglobals ($_SESSION[bla]) sollte es auch ohne session_start() gehen, allerdings sollte man es nicht machen (wie Titus sagte)!. Dann solltest du allerdings aufpassen, daß du die Session bei jedem link weitergibst!! Eine Garantie, daß es wirklich klappt, kann ich allerdings nicht geben!

    gruss

    Kommentar


    • #3
      Hi MoRtAlan

      ths für die Antwort, leider weiß nicht WIE ich die Sesison mitgeben soll ?

      ..ich kenn session_id() welches mir den die ID ausgibt, aber mit welchem Variablen namen muß ich die anhängen ?

      Thx agian

      Ray

      Kommentar


      • #4
        So
        Code:
        echo"seite.php?".session_name()."=".session_id());
        *winks*
        Gilbert
        ------------------------------------------------
        Hilfe für eine Vielzahl von Problemen!!!
        http://www.1st-rootserver.de/

        Kommentar


        • #5
          und wenn du schreibfaul bist, so:

          PHP-Code:
          function linkSession() {
              
          $session session_name()."=".session_id();
              return 
          $session;
          }

          echo 
          "<a href=\"./test.php".linkSession()."\">hierhin</a>"
          gruss

          Kommentar


          • #6
            @Mort
            du musst immer das Letzte Wort haben.
            *winks*
            Gilbert
            ------------------------------------------------
            Hilfe für eine Vielzahl von Problemen!!!
            http://www.1st-rootserver.de/

            Kommentar


            • #7
              jepp

              Kommentar


              • #8
                Re

                alsooo...das mit der Session-Übergabe klappt jetzt, leider kann ich trotzde nicht auf die Vars in der Session zu greifn oder ich hab einen Denkfehler:

                Testscript in der Art:

                <?

                session_start();
                $_SESSION['login'] = 1;

                ?>

                <img src="getcover2.php?DETAIL=<?echo $DETAIL;?>&<? echo session_name()."=".session_id();?>">

                ....

                ..der Link der dann im img-tag erzeugt wird sieht so aus (also ich denke mal das ist ok weil dieses Session-Zeux dranhängt:

                getcover2.php?DETAIL=dvd&PHPSESSID=635f9c875ad16b36566816f386417d70



                ..in der getcover2.php sieht es dann so aus:


                if ($_SESSION['login']) {

                $image="../vcdcoverz/temp/".$TABLE."/".$fn;

                }else{

                $image="../vcdcoverz/stolen.jpg";

                }

                header( "Content-type: image/jpeg" );
                @readfile( $image);


                ..leider bekomme ich , obwohl ja jetzt eigentlich login auf 1 sein müßte , immer nur das JPg aus der ELSE Anweisung (stolen.jpg)...
                Fehlt bei if ($_SESSION['login']) evtl. noch was damit der session hernimmt die ich ihm übergeben habe ?

                Schonmal Danke im voraus

                Ray

                Kommentar


                • #9
                  verwende mal in der Datei session_readonly() anstatt session_start(). Verwende das aber nur in der Datei, weil du so keine Session Variablen mehr registrieren kannst!!

                  gruss

                  Kommentar


                  • #10
                    @Morti: Wie kommst Du darauf das man mit Superglobals auf session_start() verzichten kann??

                    @rayden5_: Ich würde aus header( "Content-type: image/jpeg" );
                    mal ein header( "Content-[color=red]T[/color]ype: image/jpeg" ); damit's HTTP-Konform ist ...
                    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


                    • #11
                      es geht noch fauler:
                      PHP-Code:
                      function linkSession($link)
                      {
                        return (
                      strstr('?'$link) ? '&':'?')
                          . 
                      session_name()."=".session_id();
                      }
                      echo 
                      '<a href="'linkSession('./test.php')
                        , 
                      '">hierhin</a>'
                      mein Sport: mein Frühstück: meine Arbeit:

                      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                      Kommentar


                      • #12
                        @all,

                        also der letzte Versuch mit session_readonly(); hat auch nix gebracht, der kennt das garnicht:

                        Fatal error: Call to undefined function: session_readonly() in /xxx/getcover2.php on line 3

                        *hmpf*....das gibts doch nicht, sobald ich session_start() wegllasse klaptp die if Abfrage nichtmehr, mach ichs wieder rein geht die IF-Abfrage wieder, aber die JPgs sind jetzt "unbekannt"..zumal ich den Zusammenhang zwischen dem Header und dieser Session_geschichte nicht verstehe


                        UPDATE WIEDER WAS NEUES:

                        wer will kann mal http://www.planet-rayden.com/coverz/...28&DETAIL=back anklicken, dieses Script wird nomrl aincluded und zeigt das Cover an. Habe das jetzt so geändert daß ne session gestartet wird und login auf 1 gesetzt ist, also ihr solltet alle das Cover sehen (Sone CD Hülle Rückseite)

                        UND JETZT KOMMTS:

                        ..wenn ich auf Speichern unter gehe und das Ding speichere, speichert der mit nicht DIESES Bild sondern mein Logom welches erstens gar nicht angeziegt wird und zweitens eh nicht geladen werden dürfte wei lich login ja auf 1 habe....ich verstehs nicht *heul*...anderersiets ist es unmöglich das angezeigte Bild zu speichenr, wäre der ideale Kopierschutz, oder *g*...unter Eigenschaften erscheint als Dateigröße auch die Größe vom Logo , das Cover wäre ca. 200kb...


                        ..vielleicht noch eine andere Idee ?

                        Thx
                        Ray
                        Zuletzt geändert von rayden5_; 25.07.2002, 13:49.

                        Kommentar


                        • #13
                          vielleicht das
                          header ('Content-Type: image/jpeg');
                          vor
                          session_start();
                          setzen ?!
                          mein Sport: mein Frühstück: meine Arbeit:

                          Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                          Kommentar


                          • #14
                            @Titus,

                            nee hat leider auch nix gebracht, auch das 'T' von Content-Type habe ich jetzt groß...was mich noch wahnsinnig macht ist der Effekt den ich beim testen erhalten hab: Wenn man das Bild speichenr will, dann erhält man das Logo obowhl man ja das Cover sieht

                            ...

                            Ray

                            Kommentar


                            • #15
                              Alsooo,

                              ich hab jetzt nochmal gestet und es sieht folgendermaßen aus (in der PHP Datei welche aus dem IMG-TAG aufgerufen wird, ist die erste Zeile ssession_start() um die Session fortzuführen):

                              - Wenn ich im IMG-TAG die Session-ID NICHT anhänge wird das RICHTIGE Bild angezeigt, jedoch als Größe -1 Byte, als Typ 'unbekannt' und Speichern nur als BMP möglich

                              - Wenn ich im IMG-TAG die Session-ID anhänge wird das RICHTIGE Bild angezeigt, ABER die Größe von meinem Logo, als TYP JPGEG und bei Speichern unter wird DAS LOGO Gepseichert, obwohl ich das Cover sehe (DAS finde ich mal kurios)...

                              - Wenn ich Session_start GANZ weglasse (egal ob ich die Session_id übergebe oder nicht , klappt die IF-Abfrage nicht mehr und es wird immer das LOGO angezeigt, der TYP ist JPEg, die Größe ist Korrekt und bei Speichern unter wird auch das Logo gespeichert


                              ...alle 3 Versionen sind unbefriedigend, wobei V3. das ist was ich will, nur halt daß die IF-Abfrage noch laufen sollte

                              Was ich auch nicht verstehe, aber evtl. mein Denkfehler: Ich bin der Meinung gewesen , daß , wenn ich Session-ID anhänge, ich auf das session_start() verzichtn kann, weil er die Session weiterführt, dem ist leider nicht so, der kennt die Varsa echt nur dann wenn ich session_start ausführe..

                              Also ich hab echt keinen PLan mehr, was denn hier genau nicht paßt, falls von Euch noch Jemand was weiß, bitte melden

                              Ray
                              Zuletzt geändert von rayden5_; 25.07.2002, 15:21.

                              Kommentar

                              Lädt...
                              X