Sessionhandling mit register_globals = on

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

  • Sessionhandling mit register_globals = on

    Hi,

    ich habe folgendes Problem:

    Ich bin noch Newbie und habe ein wenig mit PHP rumgespielt und mir lokal eine kleine Webanwendung geschrieben in der ich mit Sessions arbeite. Dabei speichere ich z.B. die Benutzerdaten in der Variable $_SESSION['user'], wenn sich ein Nutzer anmeldet. Jetzt habe ich diese Anwendung auf meinem Webspace hochgeladen, hier ist allerdings, im Gegensatz zu meinem lokalen System register_globals = on gesetzt. Nun werden, wenn sich mehrere Benutzer gleichzeitig anmelden, die Inhalte von $_SESSION['user'] überschrieben.

    Meine Frage ist also, wie ich Session-Variablen benutze, wenn register_globals = on ist?! Wie kann ich userspezifische Daten in der Session speichern ohne das sie global hinterlegt werden?

    Danke!
    Steffen

  • #2
    hmm muss ein anderer Fehler sein z.B. das du immer die gleiche sid vergibst etc. aber ansonsten kann das nicht daran liegen (kann mich teuschen) da eine Session immer für einen User generiert wird und das nichts mit globals on off zu tun hat.

    mfg
    wdsl
    visit me: a-bout.de

    Kommentar


    • #3
      Wie kann ich den verhindern, dass immer dieselbe SID vergeben wird?

      Momentan rufe ich einfach session_start(); auf und speicher danach Werte in die Variable $_SESSION['...'] ab:

      <?php

      require "../objects/User.php";

      session_start();

      ...

      $user = $uh->getUserByLogin($_POST["login"]);
      ...
      $_SESSION["user"] = $user;

      ?>

      Kommentar


      • #4
        testest du auch unter (mindestens) verschiedenen browsern / von verschiedenen rechnern aus?

        Kommentar


        • #5
          Ja, verschiedene Rechner, verschiedene Browser!

          Kommentar


          • #6
            und sie bekommen trotzdem die gleiche sid?

            Kommentar


            • #7
              Also, wenn ich mit session_id() die Session-ID abfrage, so sind diese wie zu erwarten unterschiedlich! Einzig die Inhalte der Session-Varialben vermischen sich bzw. sind nicht eindeutig. Das Problem ist auf meinem lokalen System ebenfalls aufgetreten, als ich dort die Einstellung register_globals = on gesetzt habe.

              Hab es gerade noch mal ausprobiert und immer die zuletzt gespeicherten Werte in $_SESSION sind immer global gültig und nicht auf einen Client beschränkt!
              Zuletzt geändert von spoetsch; 07.03.2005, 21:44.

              Kommentar


              • #8
                zeige mal bißchen Code, wie du die Session-Werte ausliest.

                Kommentar


                • #9
                  Im Prinzip gehe ich immer nach Schema-F vor:

                  Zuerst session_start() und danach greife ich mit $_SESSION['<variablenname>'] auf die Inhalte der Session zu. Mit $_POST['<...>'] auf die Variablen eines abgeschickten Formulars.

                  Beim Speichern weise ich einfach $_SESSION['<variablenname>'] einfach ein Objekt oder einen Wert zu.

                  Unten folgt der Code-Ausschnitt aus einem Chat-Formular, wo das Problem auftritt:

                  PHP-Code:

                  session_start
                  ();

                  /* Objektklassen */    
                  require "../objects/User.php";
                  require 
                  "../objects/ChatMessage.php";
                  require 
                  "../func/ChatHandler.php";
                  require 
                  "../func/UserHandler.php";
                  require 
                  "../db.php";

                  /* Prüfen ob Session-Variable existiert */
                  if (isset($_SESSION["user"]))
                  {

                      
                  $action "false";
                      
                  $color "#000000";

                      if (isset(
                  $_POST["color"]))
                         
                  $color $_POST["color"];
                      
                      if (isset(
                  $_POST["action"]))
                        
                  $action $_POST["action"];
                          
                      
                  $userOnline = array();
                      
                  $uh = new UserHandler();
                      
                  $userOnline $uh->getUsersOnline();
                      
                  $ch = new ChatHandler();
                          
                      if (
                  $action == "sendMessage")
                      {
                          
                  $message = new ChatMessage();
                          
                          
                  $message->sender $_SESSION["user"]->login;
                          
                  $message->message $_POST["message"];
                          
                  $message->color $_POST["color"];
                          
                  $message->created date("Y-m-d H:i:s"time());
                          
                  $message->recipients $_POST["recipients"];
                          
                          
                          
                  $ch->saveMessage($message);
                      } 

                  Kommentar


                  • #10
                    wird denn E_ALL verwendet?

                    Kommentar


                    • #11
                      Da würde ich glatt sagen die Zeile ist falsch!

                      PHP-Code:
                      $_SESSION["user"]->login 
                      Dazu müsstes du der $_SESSION["user"] als Klasse Definiert haben und das wäre ja totaler Unsinn. Oder irre ich mich da?

                      Sollte soweit ich das sehen kann so heisen:

                      PHP-Code:
                      $uh->login
                      und dann

                      PHP-Code:
                      $uh = new UserHandler($_SESSION["user"]); 
                      oder irgendwie so müsste man den ganzen Code anschaun aber soweit ich das rauslesen kann.

                      mfg
                      wdsl
                      visit me: a-bout.de

                      Kommentar


                      • #12
                        E_ALL ??? Was ist das?

                        OK, habs gerade nachgeschlagen. Hab damit aber definitiv nichts gemacht bzw. eingesetzt oder sonstetwas...
                        Zuletzt geändert von spoetsch; 07.03.2005, 22:42.

                        Kommentar


                        • #13
                          Also ich habe ein Objekt vom Typ "User" in die Session geladen, dass das Attribut "Login" hat. Und mit $_SESSION["user"]->login will ich also auf ein Attribut des Objekts zugreifen, welches ich in der Session unter "user" abgespeichert habe!

                          Und wie oben bereits erwähnt, mit register_globals = off, hat es bei mir super funktioniert, ohne Probleme!

                          Kommentar


                          • #14
                            dann schau ma hier nach, wie du es einsetzst:
                            http://www.php-resource.de/forum/sho...threadid=50454

                            Kommentar


                            • #15
                              Danke für den Tipp! Hab das error_reporting(E_ALL) in alle relevanten Dateien als oberste Zeile eingebaut, leider werden keine Errors ausgegeben, obwohl das Problem auftritt!

                              Kommentar

                              Lädt...
                              X