Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Übergeben von Werten in einer Session

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Übergeben von Werten in einer Session

    Hallo an alle,

    ich bin etwas ratlos und weis gar nicht nach was ich überhaupt suchen soll und möchte gerne hier meine Frage los werden.

    ich habe mir zum Test das Beispielscript aus der PHP Hilfe genommen
    und damit unter PHP 5.2 und PHP 5.4 versucht Werte in Sessionvariablen zu übergeben.

    also von der Seite 1

    PHP-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Seite eins</title>
    </head>

    <body>

    <?php
    ini_set
    ('display_errors'1); 
    error_reporting(-1);  
    date_default_timezone_set('Europe/Berlin');
    session_start();

    echo 
    'Willkommen auf Seite #1';

    $_SESSION['farbe'] = 'grün';
    $_SESSION['tier'] = 'Spinne';
    $_SESSION['zeit'] = time();

    echo 
    "<br><br>SESSION['farbe']: " $_SESSION['farbe'] . "<br>";  // grün
    echo "SESSION['tier']: " $_SESSION['tier'] . "<br>";   // Spinne
    echo date('d.m.Y H:i:s'$_SESSION['zeit']) . "<br>";


    // Oder die Session-ID mit übergeben, für den Fall, dass sie benötigt wird
    echo '<br /><a href="seite2.php?' SID '">Seite 2 - Session-ID</a>';


    ?>
    </body>
    </html>

    zur Seite 2

    PHP-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Seite zwei</title>
    </head>

    <body>

    <?php

    ini_set
    ('display_errors'1); 
    error_reporting(-1);  
    session_start();
    date_default_timezone_set('Europe/Berlin');

    echo 
    'Willkommen auf Seite #2<br />';

    echo 
    "SESSION['farbe']: " $_SESSION['farbe'] . "<br>";  // grün
    echo "SESSION['tier']: " $_SESSION['tier'] . "<br>";   // Spinne
    echo date('d.m.Y H:i:s'$_SESSION['zeit']) . "<br>";

    // Sie können auch hier, genauso wie bei seite1.php, SID verwenden
    echo '<br /><a href="seite1.php">Seite 1</a>';


    ?>
    </body>
    </html>

    unter PHP 5.2 geht das mit der Übergabe der Werte. Aber mit PHP 5.4 geht's so nicht mehr. Jedenfalls nicht bei mir.

    Kann mir jemand einen Tip geben womit das zusammenhängt?

    Gruß Jan


  • #2
    Was heißt denn „geht nicht“ konkret?

    Im Zweifel immer debuggen.

    - http://phpforum.de/forum/showthread.php?t=216988
    - http://php-de.github.io/#debugging

    Du solltest dich zudem an das EVA-Prinzip halten, statt auf Output-Buffering zu bauen.

    - http://php-de.github.io/jumpto/eva-prinzip/
    - http://phpforum.de/forum/showthread.php?t=221678

    Hintergrund: http://php.net/manual/en/book.outcontrol.php

    session_start() interagiert mit dem HTTP-Response-Header. Sobald du irgendwas ausgibst (HTML, echo, …), bist du aber im Grunde im Body. Das funktioniert nur, wenn Ausgaben erst mal gebuffert werden, was Einstellungssache ist.

    Kommentar


    • #3
      Hallo mermshaus,

      "geht nicht" soll heißen das auf der Seite 2
      die Werte die auf Seite 1 gesetzt wurden nicht
      angezeigt werden.

      Also die hier eben ...
      PHP-Code:
      $_SESSION['farbe'] = 'grün'
      $_SESSION['tier'] = 'Spinne'
      $_SESSION['zeit'] = time(); 
      Gruß Jan

      Kommentar


      • #4
        Zitat von Jan1969 Beitrag anzeigen
        Hallo an alle,

        ich bin etwas ratlos und weis gar nicht nach was ich überhaupt suchen soll und möchte gerne hier meine Frage los werden.

        ich habe mir zum Test das Beispielscript aus der PHP Hilfe genommen
        und damit unter PHP 5.2 und PHP 5.4 versucht Werte in Sessionvariablen zu übergeben.

        also von der Seite 1

        PHP-Code:
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Seite eins</title>
        </head>

        <body>

        <?php
        ini_set
        ('display_errors'1); 
        error_reporting(-1);  
        date_default_timezone_set('Europe/Berlin');
        session_start();
        Prizipiel ist das was Du hier tust nicht möglich.

        Du kannst keine HTTP-Header mehr senden, wenn bereits etwas an den Browser als Ausgabe geschickt wurde. Aber das ist nötig, da der Session-Start genau das (Header schicken) macht.
        Folglich kommt die Session-ID in Cookie niemals beim Browser an und beim nächsten Request weiss er nix von einer bestehenden Sitzung.

        Also am besten erstmal das reparieren.

        MfG, Ulf
        PHP-Manual ¡ mysql_* ist veraltet ¡ Debugging: Finde DEINE Fehler selbst ¡ Passwort-Hashing ¡ Prepared Statements

        Kommentar


        • #5
          Hallo Ulf,

          ich habe mein kleines Beispiel jetzt so abgeändert das die Werte nun auf der Seite 2 in dieser "Session-Cookie Methoden" angezeigt werden.

          PHP-Code:
          date_default_timezone_set('Europe/Berlin');
          session_start(); 

          echo 
          'Willkommen auf Seite #1';

          $_SESSION['farbe'] = 'grün';
          $_SESSION['tier'] = 'Spinne';
          $_SESSION['zeit'] = time();

          echo 
          "<br><br>SESSION['farbe']: " $_SESSION['farbe'] . "<br>";  // grün
          echo "SESSION['tier']: " $_SESSION['tier'] . "<br>";   // Spinne
          echo date('d.m.Y H:i:s'$_SESSION['zeit']) . "<br>";



          // Funktioniert, falls das Session-Cookie akzeptiert wurde
          echo '<br /><a href="seite2.php">Seite 2 - Session-Cookie</a>';

          // Oder die Session-ID mit übergeben, für den Fall, dass sie benötigt wird
          #echo '<br /><a href="seite2.php?' . SID . '">Seite 2 - Session-ID</a>'; 


          PHP-Code:
          session_start();
          date_default_timezone_set('Europe/Berlin');

          echo 
          'Willkommen auf Seite #2';

          echo 
          "<br><br>SESSION['farbe']: " $_SESSION['farbe'] . "<br>";  // grün
          echo "SESSION['tier']: " $_SESSION['tier'] . "<br>";   // Spinne
          echo date('d.m.Y H:i:s'$_SESSION['zeit']) . "<br>";

          // Sie können auch hier, genauso wie bei seite1.php, SID verwenden
          echo '<br /><a href="seite1.php">Seite 1</a>'

          aber es geht nur die eine Variante die in diesem Beispiel aus der Hilfe als "Session-Cookie" bezeichnet wird.

          Die andere Variante in der man die Session ID in der Url übergibt geht bei mir hier nicht. Also wenn ich das ganze mit PHP 5.4 oder höher versuche.
          Ich habe gelesen das es wohl unsicher wäre die Session ID per Url auf die nächste Seite zu übergeben. Heißt das nun das man das so nicht mehr benutzen kann?

          Mfg Jan

          Kommentar


          • #6
            Auch das ist Einstellungssache.

            - http://php.net/manual/en/session.configuration.php

            Musst mal gucken (passende php.ini, phpinfo(), ini_get(), …), wie du "session.use_only_cookies" und "session.use_trans_sid" und so konfiguriert hast.

            Es ist aber nicht zu empfehlen, die Session-ID über den URL mitzusenden. Das ist richtig.

            Vielleicht interessant: http://phpforum.de/forum/showthread.php?t=225402

            Unterschiede zwischen PHP 5.2 und 5.4 dürften maßgeblich an unterschiedlichen Konfigurationseinstellungen liegen. Bei den Funktionen hat sich da „syntaktisch“ glaube ich nicht so wahnsinnig viel geändert.

            Kommentar


            • #7
              Hi,

              jetzt habe ich wohl begriffen was ich falsch mache...

              ich muss dieses

              PHP-Code:
              <?php session_start(); ?>
              wirklich zu aller erst schreiben damit das funktioniert.
              Das verwirrende für mich war halt nur das dieser Code hier

              PHP-Code:
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml">
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
              <title>Seite zwei</title>
              </head>

              <body>

              <?php

              session_start
              ();
              date_default_timezone_set('Europe/Berlin');


              echo 
              'Willkommen auf Seite #2<br />';

              echo 
              "SESSION['farbe']: " $_SESSION['farbe'] . "<br>";  // grün
              echo "SESSION['tier']: " $_SESSION['tier'] . "<br>";   // Spinne
              echo date('d.m.Y H:i:s'$_SESSION['zeit']) . "<br>";

              // Sie können auch hier, genauso wie bei seite1.php, SID verwenden
              echo '<br /><a href="seite1.php">Seite 1</a>';


              ?>
              </body>
              </html>
              unter PHP 5.2 geht aber in PHP 5.4 oder höher geht das nicht mehr.
              Dann muss das wohl so aussehen...

              PHP-Code:
              <?php session_start(); ?>
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml">
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
              <title>Seite zwei</title>
              </head>

              <body>

              <?php


              date_default_timezone_set
              ('Europe/Berlin');


              echo 
              'Willkommen auf Seite #2<br />';

              echo 
              "SESSION['farbe']: " $_SESSION['farbe'] . "<br>";  // grün
              echo "SESSION['tier']: " $_SESSION['tier'] . "<br>";   // Spinne
              echo date('d.m.Y H:i:s'$_SESSION['zeit']) . "<br>";

              // Sie können auch hier, genauso wie bei seite1.php, SID verwenden
              echo '<br /><a href="seite1.php">Seite 1</a>';


              ?>
              </body>
              </html>

              Gruß Jan

              Kommentar


              • #8
                Wie gesagt: Deine PHP-Versionen dürften unterschiedliche Werte liefern für:

                PHP-Code:
                var_dump(ini_get('output_buffering')); 
                Kannst du ja mal testen.

                Und das Nutzen von output buffering ist eben mehr oder weniger eine Krücke, weil man das EVA-Prinzip verletzt. Ich würde so was nicht als falsch bezeichnen (könnte man aber), aber es hat halt offensichtliche Nachteile.

                wirklich zu aller erst schreiben damit das funktioniert.
                Hängt eben daran, dass die Funktion den HTTP-Response-Header modifiziert, der im Protokoll vor dem Body (das übliche HTML-Zeugs) an den User-Agent/Client (Browser) geschickt wird.

                Sinnbildlich: Wenn du erst HTML ausgibst, bevor du den Header passend konfigurierst, ist das so, als würdest du einen Brief in den Briefkasten werfen und danach versuchen, die Empfängeradresse auf den Umschlag zu schreiben.

                Kommentar


                • #9
                  Danke für die nette Unterhaltung Ulfikado und mermshaus! Jetzt bin ich wieder ein kleines bisschen schlauer. Bis zum nächsten Problem

                  Gruß Jan

                  Kommentar

                  Lädt...
                  X