Variablenzuweisung mit $_SESSION

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

  • Variablenzuweisung mit $_SESSION

    Hallo allerseits,

    mein Problem konnte ich mittlerweile auf ein ein kleines Script verkürzen. Es liegt darin, dass anscheinend bei der Zuweisungsfolge

    $variable=$_SESSION['sessionvariable'];
    $variable="XXX";


    Anschließend auch $_SESSION['sessionvariable']=="XXX"; gilt

    Das Script ist das folgende

    PHP-Code:
    <?php

    session_start
    ();

    if(!isset(
    $_SESSION['mode'])) {$_SESSION['mode']="old";}

    echo 
    $mode." - ".$_SESSION['mode']."<br>";
    $mode=$_SESSION['mode'];
    echo 
    $mode." - ".$_SESSION['mode']."<br>";
    $mode="new";
    echo 
    $mode." - ".$_SESSION['mode']."<br>";

    $_SESSION['mode']="old";

    ?>


    <html>
    <head>

    <title>Session Test</title>
    </head>

    <body >
    <table>
      <a href="?">Click Me!</a>
    </body>
    </html>
    Die Ausgabe lautet wie folgt:

    old - old
    old - old
    new - new
    Click Me!
    Demnach wurde mit der Zuweisung von $mode="new"; automatisch auch $_SESSION['mode']="new"; durchgeführt.

    Mache ich da irgend etwas falsch? Ist das ein Gedankenfehler? Oder ein Bug? Die benutzte PHP Version ist 4.x

    Danke schonmal

    Gerald

  • #2
    Irgendwas stimmt doch da nicht mit deinem Code, das scheint nicht der zu sein, den du ausführst. $mode ist bei der ersten Ausgabe doch noch gar nicht gesetzt, trotzdem ist der Variable angeblich der Wert "old" zugewiesen.

    Ich habe deinen Code modifiziert:

    PHP-Code:
    <?php
    error_reporting
    (E_ALL E_STRICT);
    ini_set('display_errors'1);

    session_start();

    if(!isset(
    $_SESSION['mode'])) {$_SESSION['mode']="old";}
    $mode '';
    echo 
    $mode." - ".$_SESSION['mode']."<br>";
    $mode=$_SESSION['mode'];
    echo 
    $mode." - ".$_SESSION['mode']."<br>";
    $mode="new";
    echo 
    $mode." - ".$_SESSION['mode']."<br>";

    $_SESSION['mode']="old";

    ?>


    <html>
    <head>

    <title>Session Test</title>
    </head>

    <body >
    <table>
      <a href="?">Click Me!</a>
    </body>
    </html>
    Und erhalte folgende Ausgabe:

    Code:
    - old
    old - old
    new - old
    Click Me!
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Vielen Dank für die schnelle Antwort.

      Ja - irgendwie sieht das bei mir komisch aus. Die veränderte Version schreibt bei mir das hier:

      -
      -
      new - new
      Click Me!
      Beide Versionen können auch direkt aufgerufen werden:

      Version-1
      Version-2

      Viele Grüße

      Gerald

      Kommentar


      • #4
        Die erste Ausgabe entspricht meiner, die zweite nicht. Da hast du also auch wieder anderen Code verwendet ... wenn du uns den vorenthälst kann man hier nur raten!
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Nein - ich habe genau deinen Kode benutzt. Allerdings mag die Sesisonvariable anders gesetzt gewesen sein. Welche Ausgabe hast du denn (in welchem Fall) erhalten?

          Wir haben ja nun schon (mindestens) vier Fälle - zwei Kodefragmente auf zwei verschiedenen Serven ..

          Grüße

          Gerald

          Kommentar


          • #6
            Inzwischen habe ich das mal auf einen anderen Server geladen und ausgeführt. Dort liefern beide Scripte das erwartete Resultat:

            - old
            old - old
            new - old
            Click Me!
            Der zweite Server läuft mit PHP 5.2.6.. Kann es an der PHP Version liegen - oder kann man da was konfigurieren?

            Viele Grüße

            Gerald

            Kommentar


            • #7
              register_globals ausschalten, dann hört der Spuk auf!

              Kommentar


              • #8
                Vielen Dank - das hat das Problem gelöst. Nun ist das Verhalten so wie erwartet. Ich hab mittlerweile auch mal versucht zu verstehen bzw. mich schlau zu machen, was da bei bei register_globals = on genau passiert. Aber leider hab ich's nicht ganz verstanden. Kann mir das bitte mal jemand erlären?

                Danke

                Gerald

                Kommentar


                • #9
                  Bei register_globals = on wird jedes Key-Value-Paar aus den superglobalen Dollar-Unterstrich-Arrays ($_GET, $_POST, $_REQUEST, $_SERVER etc.) als globale Variable registriert.

                  Anfangs hielt man das für schlau und bequem, später fand man heraus, dass es gefährlich ist und demnächst wird es ganz abgeschafft.

                  Kommentar


                  • #10
                    Gefährlich wirds nur bei schlampigem Code.
                    (und davon gibts genug)

                    Einfachste Maßnahme um neutral zur register_globals Einstellung zu programmieren: Kompletter Verzicht auf globale Variablen im Script.
                    Wir werden alle sterben

                    Kommentar

                    Lädt...
                    X