Jan: sessions

Ich befasse mich gerade mit sessions und wollte folgenden Code ausprobieren:
<?php
//Session wird gestartet!
session_start();
//Ausgabe der Daten!
echo "Sie haben die Session-ID: " . session_id();
echo "<br>";
echo "Ihr Sessionname lautet: " . session_name();
echo "<br>";
//Startzeitpunkt wird festgestellt und registriert!
$startzeit = time();
session_register("startzeit");
?>
<!-- HTML-Formular für den Usernamen -->
Willkommen!<br>
<form action="session_b.php" method="post">
Bitte Namen eingeben:<br>
<input name="name">
<input type="submit" value="anmelden">
</form>
<?php
//Sessiondaten werden überprüft!
if (session_is_registered("startzeit"))
{
echo "Ihre Startzeit wurde erfolgreich registriert!";
}
?>
... nur kommt immer diese Fehlermeldung und weiß nicht genau was ich damit anfangen soll, muss ich jetzt was an dem Code ändern damit er funktioniert?

Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

  1. Hello,

    <?php
    //Session wird gestartet!
    session_start();
    //Ausgabe der Daten!
    echo "Sie haben die Session-ID: " . session_id();
    echo "<br>";
    echo "Ihr Sessionname lautet: " . session_name();
    echo "<br>";
    //Startzeitpunkt wird festgestellt und registriert!

    #> $startzeit = time();
    #> session_register("startzeit");
    das sollte besser so aussehen:

    $_SESSION['startzeit'] = time();

    oder, wenn nur bei Sessionbeginn rgistriert werden soll:

    if(!isset($_SESSION['startzeit'])) $_SESSION['startzeit'] = time();

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

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. ...danke für eure Hilfe, wusste nicht das es wie ich es gemacht habe veraltet ist, so $_SESSION['variablenname'] klappt es jetzt...  Nochmals danke...

  2. Hi Jan
    Die Lösung steht doch da:

    Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

    ich würd dann an der Stelle mal meine PHP.ini so konfigurieren, wie er es vorschlägt...

    MfG
    Christof

  3. Hallo Jan,

    mit Apache 1.3.29 und CGI-PHP 4.0.2/4.3.10 erscheint diese Fehlermeldung nicht.

    Gruss Robert

  4. session_register("startzeit");

    Dies ist veraltet. Auf Session-Variablen greift man heute mit $_SESSION['variablenname'] zu.
    Wenn dir das zu umständlich ist, kannst du eine Referenz verwenden. Das setzt natürlich voraus, dass du Grundwissen zu Referenzen hast/aneignest.

    // erzeugt $foo als eine Referenz auf $_SESSION['foo']
    $foo =& $_SESSION['foo'];

    $foo = 42;

    echo $foo;
    echo $_SESSION['foo'];

  5. register_globals sollte in der php.ini auf TRUE gesetzt werden.

    Soweit ich weiß übernimmt php damit die Variablen von Seite zu Seite. Ist die Funktion deaktiviert musst du die Variable eigehändig an jeden Link anhängen.

    Je nachdem wo du das Script laufen hast wirst du auch auf unterschiedliche Konfigurationen treffen. Ich hatte den Fall das auf meinem localhost die Konfig so eingestellt war das er Variablen automatisch übertragen hat. Beim Kunden dann auf den Webspace aufgespielt ging das nicht mehr --> schöne Arbeit !! Solltest du auf jeden Fall berücksichtigen.

    Ansonsten GOOGLE mal nach dem exaktem Wortlaut der Fehlermeldung ;-)

    Gruß Christian

    1. Moin!

      register_globals sollte in der php.ini auf TRUE gesetzt werden.

      Nein, das sollte schön brav auf FALSE gesetzt bleiben.

      Soweit ich weiß übernimmt php damit die Variablen von Seite zu Seite. Ist die Funktion deaktiviert musst du die Variable eigehändig an jeden Link anhängen.

      Nein, register_globals hat was mit dem Erzeugen globaler Variablen aus diversen externen Quellen zu tun - und genau deshalb ist es auch schlecht, weil ein Angreifer auf diese Weise beliebige globale Variablen erzeugen kann, und ein schlecht programmiertes Skript so zu Fehlverhalten animiert werden kann.

      Je nachdem wo du das Script laufen hast wirst du auch auf unterschiedliche Konfigurationen treffen. Ich hatte den Fall das auf meinem localhost die Konfig so eingestellt war das er Variablen automatisch übertragen hat. Beim Kunden dann auf den Webspace aufgespielt ging das nicht mehr --> schöne Arbeit !! Solltest du auf jeden Fall berücksichtigen.

      Es ist kein Problem, mit register_globals=false zu programmieren, auch wenn auf dem entgültigen Host register_globals erstmal eingeschaltet sind. Umgekehrt hat man ein großes Problem. Selber schuld, würde ich sagen.

      Ansonsten wäre es keine schlechte Idee, die Einstellungen auf dem Zielhost mit phpinfo() auszulesen und auf dem Entwicklungsrechner identisch einzustellen.

      • Sven Rautenberg
      1. Hello,

        Nein, register_globals hat was mit dem Erzeugen globaler Variablen aus diversen externen Quellen zu tun - und genau deshalb ist es auch schlecht, weil ein Angreifer auf diese Weise beliebige globale Variablen erzeugen kann, und ein schlecht programmiertes Skript so zu Fehlverhalten animiert werden kann.

        Außerdem ist es ein Affentanz, wenn man folgendes Szeneario hat:

        Ein Paramter für die Sprache wird in $lang übergeben, also

        www.domain.tld/verzeichnis/page.php?lang=de

        Wenn kein Paramter übergeben wird, soll $lang aus der Sessiondatei genommen werden
        Wenn  dort auch keiner enthalten ist, soll ein Defaultwert benutzt werden

        Außerdem soll $lang am Ende des Scriptes wieder in die Session geschrieben werden.

        Dieses kleine Beispiel nur zur weiteren Verdeutlichung der Schwierigkeiten, die man sich mit regsiter_globals=on außerdem für eine einfache und klare Programmstruktur einfängt.

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

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau