stephanbauer: $_SESSION und session_register()

Hallo,
ich habe jetzt gelesen, dass man $_SESSION nicht in Kombination mit session_register() oder session_is_registered() verwenden sollte.
Wozu könnte das denn führen?

Habe nämlich diesen Fehler gemacht, aber ich weiss nicht ob es daran lag.
Meine Benutzer sind schon verärgert und ich möchte ungern wieder auf ihre Kosten testen.
Bei mir gab es nie irgendwelche Probleme, egal wie lange ich getestet habe,
doch einige Benutzer hat es Rausgehauen.

Hatte beim Login die Variablen mit
session_register("benutzer_ip");
session_register("benutzer_id");
gesetzt und mit
$HTTP_SESSION_VARS["benutzer_ip"] = $REMOTE_ADDR;
... gepeichert

Dann wurden sie auf den gesicherten Seiten mit
if ( ! session_is_registered("benutzer_ip") || $HTTP_SESSION_VARS["benutzer_ip"] != $REMOTE_ADDR .. )
überprüft und gegebenenfalls umgeleitet, was dann tatsächlich einigen passiert ist.

Würde es jetzt laufen wenn ich die ganzen session_register und session_is_registred rausschmeisse und $HTTP_SESSION_VARS durch $_SESSION ersetze?

(Die Sessions werden durch die php.ini automatisch mit use_trans_sid gestartet)

  1. Hello,

    ich habe jetzt gelesen, dass man $_SESSION nicht in Kombination mit session_register() oder session_is_registered() verwenden sollte.
    Wozu könnte das denn führen?

    Au weh, bei Windows-Systemen könnte die gesamte Festplatte leergegessen erden.
    Bei Linux-basierten Systemen ist allerdings nur mit etwas Script-Chaos zu rechnen. *gg*

    Benutze einfach nur noch die neueren superglobalen Arrays, die alle mit $_* anfangen. In das Array $_SESSION schreibst Du einfach während des Scriptes irgendwann die zu sichernden Werte rein und wenn das Script stirbt oder normal terminiert,dann werden sie in der zugehörigen Datei gespeichert. Mit dem session_start() stehen sie in $_SESSION wieder zur Verfügung.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Benutze einfach nur noch die neueren superglobalen Arrays, die alle mit $_* anfangen. In das Array $_SESSION schreibst Du einfach während des Scriptes irgendwann die zu sichernden Werte rein und wenn das Script stirbt oder normal terminiert,dann werden sie in der zugehörigen Datei gespeichert. Mit dem session_start() stehen sie in $_SESSION wieder zur Verfügung.

      Ich verstehe es nicht, aber es will einfach nicht funktionieren..
      Die php.ini startet die Sessions automatisch mit use_trans_sid, damit das Ganze auch ohne Cookies funktioniert.
      Man behällt auch die ganze Zeit die gleiche Session, sonst hätten sich schon zahlreiche Leute bei mir beschwert.
      Aber trotzdem schmeisst es doch einige (mich hat es noch nicht erwischt) immer wieder raus, wenn ich eine IP-Überprüfung in die Session einbaue.

      Ich lasse nach dem Login die IP mit
      $_SESSION["benutzer_ip"] = $REMOTE_ADDR; //REMOTE_ADDR existiert laut phpinfo()
      speichern und überprüfe auf den folgenden Seiten (nur für eingeloggte Benutzer zugänglich) mit
      if ( $_SESSION["benutzer_ip"] == "" || $_SESSION["benutzer_ip"] != $REMOTE_ADDR  ) header( "Location: login.php?error=ip&PHPSESSID=".session_id() );

      Ich habe zum Glück jemanden gefragt, den es schon bei der alten Version rausgeschmissen hat.
      Jetzt schon wieder, nach dem 3. Versuch
      Ich komme einfach nicht dahinter, wo mein Fehler steckt
      (es steckt auch in keiner Funktion, die Variablen blocken könnte)

      1. verwende mal statt $REMOTE_ADDR -> $_SERVER['REMOTE_ADDR']

  2. Ich ahbe in etwa die selbe Technik und benutze session_is_resgistered...

    kannst du die probleme spezifizieren damit ich sehen kann ob mein system auch davon betroffen ist?

    ciao

    1. Hello,

      Ich ahbe in etwa die selbe Technik und benutze session_is_resgistered...

      kannst du die probleme spezifizieren damit ich sehen kann ob mein system auch davon betroffen ist?

      Garantiert!
      Die Arrays $_SESSION und $HTTP_SESSION_VARS werden redundant genutzt. $HTTP_SESSION_VARS wird ab PHP 5 per default abgeschaltet sein. Damit funktioniert auch das verdeckte Array für _registered() nicht mehr.

      Ihr solltet langsam mal umstellen. Das geht ja nun schon in die dreitte Stufe, spich das dritte Jahr.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Ich komme nicht mit....

        was muss ich genau ändern...

        Teilweise benutze ich im script schon $_SESSION...

        reicht es einfach wenn ich bei jeder abfrage von

        if (is_session_registered('xxx'))

        ein

        If (isset($_SESSION))

        benutzE? =/

        Macht mich nicht schwach =)

        ciao

        1. Hello,

          Teilweise benutze ich im script schon $_SESSION...

          reicht es einfach wenn ich bei jeder abfrage von

          if (is_session_registered('xxx'))

          ein

          If (isset($_SESSION))

          benutzE? =/

          Fast getroffen...

          if (isset($_SESSION['variablenname']))
          {
            echo "variable variablenname ist vorhanden";
          }
          else
          }
            echo "Pech gehabt, variablenname it nicht da";
          }

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. also sollte meine Einstellung jetzt gehen

            1. hier... wenn dir noch soetwas auffällt ne.... ich höre gern von dir =)

              *pustet aus*
              Gut dass ich samstags nichts zu tun ahbe und im Forum krame =)

              ciao