Ankündigung

Einklappen
Keine Ankündigung bisher.

Merkw�rdiges Session Spiel

Einklappen

Neue Werbung 2019

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

  • Merkw�rdiges Session Spiel

    Hallo Leute,

    ich hänge nun schon ne Weile an einem kleinen Problem, welches ich einfach nicht gelöst kriege, und mir irgendwie das Verständniss dafür fehlt.
    Ich probiere es mal zu erläutern.

    Ich erstelle mir eine Session mit session_start(), darin befindet sich eine Variable Names usersession_id. Beim Starten weise ich der Variable eine Kombination aus Timestamp und Session_id zu.

    Hier der Code :
    PHP-Code:
    <?php
    session_start
    ();
    If(empty(
    $_SESSION['usersession_id'])) {
       
    $session_register("usersession_id");
       
    $session_time time();
       
    $usersession_id .= $session_time "-" session_id();
    }
    echo 
    "SESSION ID :$usersession_id
    "
    ;
    echo 
    "<a href=\"index.php?SID\">Neu laden mit SID</a>
    "
    ;
    echo 
    "<a href=\"index.php\">Neu laden ohne SID</a>
    "
    ;
    ?>
    Dieses kleine Script (wenn man es so nennen darf) habe ich auf zwei Servern vom gleichen Anbieter liegen.

    http://web140.kserver04.de
    und
    http://web94.kserver06.de/test

    Wenn man nun auf den Link "Neu laden" klickt wird bei dem ersten Link (Kserver04) eine neue usersession_id erzeugt. Eigentlich ändert sich nur der Timestamp, die Session_id bleibt gleich.
    Beim zweiten Link (Kserver06) bleibt die usersession_id bestehen, dabei ist es egal, ob ich die Konstante SID mitschicke oder nicht.

    Bei beiden Servern sind folgende Einstellungen, was Sessions anbelangt gleich :
    session.use_cookies : On
    session.use_only_cookies : Off
    session.use_trans_sid : Off

    Der einzige Unterschied, den ich in der PHP.ini habe, ist das bei Kserver04 der Wert Register_Globals auf OFF gestellt ist.

    Ich denke mal, das es nun daran liegt, aber kann ich dann trotzdem mit Session arbeiten, auch wenn Register_Globals auf OFF steht ?

    Ich hoffe Ihr versteht mein Problem und könnt mir helfen.

  • #2
    $_SESSION und session_register beißen sich. Um Daten in die Session zu stecken, benutuze ausschließlich $_SESSION. Wenn du die Session-Id ändern möchtest, verwende session_id("neue id"). Dazu siehe folgenden Auszug aus dem Manual:

    Wenn ID angegeben wird, wird die die aktuelle Session-ID ersetzt. session_id() muss zu diesem Zweck vor session_start() aufgerufen werden. In Abhängigkeit von der Session-Prozedur sind in der Session-ID nicht alle Zeichen erlaubt. Zum Beispiel erlaubt die dateibasierte Session-Prozedur nur Zeichen im Bereich a-z, A-Z und 0-9!

    Kommentar


    • #3
      Habe den Code nun folgendermaßen umgeschrieben.

      Aber nun wird keine usersession_id mehr angezeigt.

      PHP-Code:
      <?php
        session_start
      ();
        If(empty(
      $_SESSION['usersession_id'])) {
      //    session_register("usersession_id");
          
      $session_time time();
              
      $_SESSION["usersession_id"] .= $session_time "-" session_id();
        }
      echo 
      "SESSION ID :" .$_SESSION["usersession_id"] . "
      "
      ;
      //printf('[url="index.php?%s"]Neu laden mit SID[/url]', SID); 
      echo "<a href=\"index.php?SID\">Neu laden mit SID</a>
      "
      ;
      echo 
      "<a href=\"index.php\">Neu laden ohne SID</a>
      "
      ;
      ?>
      EDIT : Hab den Fehler gefunden, leider habe ich ein $ Zeichen zuviel verwendet. Vielen Dank für eure Hilfe

      Kommentar


      • #4
        print_r($_SESSION);

        Warum benutzt du mal $usersession_id als key und mal usersession_id?

        Wenn du in einem Forum postest, such vorher mindestens mal 15 Minuten selber nach dem Fehler. Das sind 7 Zeilen relevanter Code, da wird man ja wohl noch einen Fehler finden können

        Kommentar


        • #5
          ich glaube Du hat die Frage geschrieben, bevor ich den Fehler gefunden habe.

          Die Lösung hatte ich im alten Post editiert. Hab es jetzt so getestet und funktioniert.

          Aber mal ne andere Frage. Wenn man eine Session zerstört und eine neue generiert, so ist die Session ID gleich. Deshalb benötige ich noch den Timestamp. Gibt es eine ändere Möglichkeit hierfür ?

          Kommentar


          • #6
            http://de.php.net/session_destroy

            Kommentar


            • #7
              Zitat von az-id
              Wenn man eine Session zerstört und eine neue generiert, so ist die Session ID gleich. Deshalb benötige ich noch den Timestamp
              Nicht als Teil der Session-Id. Hättest du meinen Beitrag gelesen, wüsstest du, dass du mit der Funktion session_id die Session-Id setzen (überschreiben) kannst.

              session_id(md5(microtime());

              Könnte helfen.

              Kommentar


              • #8
                Ja wunderbar, vielen Dank auch. Jetzt kann ich mir das ganze Timestamp ersparen.

                Kommentar


                • #9
                  Da gefällt mir dir Lösung von Zergling aber besser. Trotzdem vielen Dank.

                  PS : Ich habe Deinen Beitrag aber auch sorgfälltig gelesen, nur vielleich noch ein wenig übermüdet. Habe bis gestern Nacht an diesem Problem gehangen.

                  Kommentar


                  • #10
                    Zitat von az-id
                    Da gefällt mir dir Lösung von Zergling aber besser.
                    Die ist auch die einzig richtige, wenn du die Session zerstören willst

                    Kommentar


                    • #11
                      Wobei ich dachte dir wär die Funktion bekannt @az-id, ich wollte dich nur auf den Hinweis-Text bezüglich des Cookies im Manual hinweisen.

                      Kommentar


                      • #12
                        habe ich eigentlich auch gedacht. Denke ich habe eine kleine künstliche Pause eingelegt.
                        Je später der Tag, desto unlogischer scheint mir das was ich gestern Abend geschrieben habe.

                        Kommentar

                        Lädt...
                        X