Tom: Was anstelle von session_is_registered()?

Hallo,

habe gerade mehr oder weniger zufällig erfahren, dass man session_register(), session_is_registered() und session_unregister() nicht mehr verwenden soll (Bei php.net heißt es: If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister()).

Meine Frage: Wie soll man es dann machen? Soll man nun "if (isset($_SESSION[]))" statt "session_is_registerd()" schreiben?

Danke & Grüße, Tom

  1. aitee

    also $_SESSION is equivalent zu session_register ?
    und isset ... is " zu session_is_registered ?

    Gut zu wissen :)

    1. Moin!

      also $_SESSION is equivalent zu session_register ?

      Nein.

      $_SESSION ist eine Variable, deren Inhalt am Ende eines Skriptes (in dem session_start() aufgerufen wurde) gespeichert und beim nächsten Aufruf von session_start() wiederhergestellt wird.

      Man kann sie prima als mehrdimensionales Array verwenden, auf das man aus allen Ebenen (auch aus Funktionen) zugreifen kann. Es ist unnötig, aus dem Array Variablen zu extrahieren und wieder reinzuschreiben so nach dem Motto:
      $user = $_SESSION['user'];
      ....
      $_SESSION['user'] = $user;

      und isset ... is " zu session_is_registered ?

      Nein. isset() fragt ab, ob die als Parameter genannte Variable existiert. Das bezieht sich im Falle von einzelnen Arrayfeldern nur auf das jeweilige Arrayfeld, nicht auf das Array insgesamt.

      - Sven Rautenberg

      --
      "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
      (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
      1. Und sind diese Arrays dann sicher?

        Wenn ich nun ein Login habe und ich registriere mir mit

        $_SESSION ['login_ok'] = "true";

        eine Variable.

        Kann ich dann eben diese zur Abfrage benutzen?
        Oder kann man das irgendwie fälschen?

        greetz aitee

        1. Hello,

          Und sind diese Arrays dann sicher?

          Wovor?

          Wenn ich nun ein Login habe und ich registriere mir mit

          $_SESSION ['login_ok'] = "true";  eine Variable.

          Kann ich dann eben diese zur Abfrage benutzen?
          Oder kann man das irgendwie fälschen?

          Ich würde immer einen eindutigen PIN reinschreiben, der aus einem zusätzlichen Cookie vom Client mitgeliefert werden muss. Das verhindert Multi-Client-Sessions...

          (@ Sven: Das ist jetzt schon der dritte Vorteil des Doppel-Cookie-Verfahrens... *grins* )

          Tom

          1. Ich würde immer einen eindutigen PIN reinschreiben, der aus einem zusätzlichen Cookie vom Client mitgeliefert werden muss. Das verhindert Multi-Client-Sessions...

            Ähm ... was bitte?

            (@ Sven: Das ist jetzt schon der dritte Vorteil des Doppel-Cookie-Verfahrens... *grins* )

            Ähm ... s.o. ;P

          2. Moin!

            Ich würde immer einen eindutigen PIN reinschreiben, der aus einem zusätzlichen Cookie vom Client mitgeliefert werden muss. Das verhindert Multi-Client-Sessions...

            ...nicht.

            (@ Sven: Das ist jetzt schon der dritte Vorteil des Doppel-Cookie-Verfahrens... *grins* )

            Man kann alles manipulieren. Nichts wird verhindert. Es wird nur etwas schwieriger gemacht (und in diesem Fall noch nicht mal besonders viel schwieriger).

            Wenn als Session-Mechanismus sowieso nur Cookies erlaubt sind, und das Fallback auf URL nicht erlaubt und nicht zugelassen wird, ist es für den Benutzer genauso kompliziert, eine vorhandenen Session auf einen anderen Browser zu transferieren, als wenn du noch tausend weitere Cookies setzt.

            Du erreichst keinerlei qualitative Verbesserung, du erreichst allerhöchstens quantitative Verbesserungen.

            - Sven Rautenberg

            --
            "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
            (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
        2. Moin!

          Und sind diese Arrays dann sicher?

          Sie werden von der Festplatte des Servers eingelesen und da auch wieder gespeichert. Jeder Benutzer auf dem Server, der darauf Zugriff hat, kann manipulieren. Aber der wird dann vermutlich noch ganz andere Möglichkeiten haben.

          Die Sicherheit von session_register()-Variablen und $_SESSION ist identisch. Beidesmal wird derselbe Mechanismus benutzt (den man allerdings auch ändern kann, wenn man will und dafür eigene Funktionen schreibt).

          Wenn ich nun ein Login habe und ich registriere mir mit

          $_SESSION ['login_ok'] = "true";

          eine Variable.

          Kann ich dann eben diese zur Abfrage benutzen?
          Oder kann man das irgendwie fälschen?

          Ja, das kannst du benutzen. Ja, sicherlich wird man das irgendwie auch manipulieren können. Ich wäre dumm, wenn ich hier absolute Sicherheit versprechen würde. Aber die Frage ist immer, wie das genau gehen soll. Schließlich ist der drumherum verteilte Code ja nicht ganz unbeteiligt. Und wenn der fehlerhaft ist, geht einiges.

          - Sven Rautenberg

          --
          "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
          (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
  2. Hallo Tom,

    Meine Frage: Wie soll man es dann machen? Soll man nun "if (isset($_SESSION[]))" statt "session_is_registerd()" schreiben?

    fast, isset($_SESSION['name']) statt session_is_registerd('name') (also den Key des $_SESSION-Arrays mit angeben).

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Hallo Tobias,

      fast, isset($_SESSION['name']) statt session_is_registerd('name') (also den Key des $_SESSION-Arrays mit angeben).

      OK, so meinte ich's.

      Gut zu wissen, danke!
      Tom

  3. Hallo,

    noch was: wie mache ich das:

    session_unregister("bla");
    $bla = "neuer Wert";
    session_register("bla");

    einfach so?

    $_SESSION['bla'] = "neuer Wert";

    Danke, Tom

    1. Hallo Tom,

      session_unregister("bla");
      $bla = "neuer Wert";
      session_register("bla");

      $_SESSION['bla'] = "neuer Wert";

      ja, und wenn du nur session_unregister('bla') brauchst, dann nimmst du einfach unset($_SESSION['bla']).

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      1. Ich danke Euch!
        Tom

    2. Ja

      greetz aitee

    3. hi,

      session_unregister("bla");  <-- nein

      unset ($_SESSION["bla"]);

      $bla = "neuer Wert";  <-- ja
      $_SESSION['bla'] = "neuer Wert"; <-- ja

      ich denke mal so

      ronny

      1. Moin!

        session_unregister("bla");  <-- nein  <-- genau

        unset ($_SESSION["bla"]);  <-- überflüssig

        $bla = "neuer Wert";  <-- ja <-- überflüssig
        $_SESSION['bla'] = "neuer Wert"; <-- ja <-- genau

        Lieber so.

        Also in der Summe:
        $_SESSION['bla'] = "neuer Wert";

        Fertig.

        Die Verwendung von $_SESSION hat auch den Vorteil, dass man (wieder einmal) die Namensräume trennt. Durch das unbedachte Registrieren einer Variablen in einem Skript, welche in einem anderen Skript dummerweise als von der Session nicht zu benutzende globale Variable benutzt würde, hätte man ganz dumme Probleme provoziert. Insbesondere, wenn diese globale Variable noch vor session_start() definiert worden wäre, würde ihr Wert durch session_start() zerstört.

        $_SESSION ist also "eine sehr gute Sache[TM]".

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
        1. Hello,

          Die Verwendung von $_SESSION hat auch den Vorteil, dass man (wieder einmal) die Namensräume trennt. Durch das unbedachte Registrieren einer Variablen in einem Skript, welche in einem anderen Skript dummerweise als von der Session nicht zu benutzende globale Variable benutzt würde, hätte man ganz dumme Probleme provoziert. Insbesondere, wenn diese globale Variable noch vor session_start() definiert worden wäre, würde ihr Wert durch session_start() zerstört.

          $_SESSION ist also "eine sehr gute Sache[TM]".

          Wie das saubere Trennen von Namensräumen immer ist.
          Ich erinnere hier an meinen Vorschlag, alle Formular-Variablen, die z.B. eine Bindung an eine Tabelle einer DB haben, mit

          <input type="..." name="data[var_name]" ...> abzugrenzen.

          Dann landen die später schön sortiert in $_POST["data"]["var_name"] & Co und man kann sie sehr schön mit vorgefertigen Update- und Insertscripten behandeln.

          ... tbc

          Grüßle

          Tom