Andreas: Newbie: einfaches Session Script funktioniert nicht

Hallo Forum!

Das folgende simple Script funktioniert bei mir lokal sowohl mit aktiviertem als auch deaktivierten Cookies im Browser korrekt:

<?php
 session_register("counter");
 $counter++;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head><title></title></head>
<body>
<?php
 echo ($counter);
 echo ("<br>");
 echo ("<a href="weiter.php?".session_id()."">weiter</a>");
?>
</body>
</html>

Der Dateiname lautet ebenfalls "weiter.php". Es wird also nur die Anzahl der Besuche gezählt. (Dieses Script kennen bestimmt die meisten...)
Wenn ich es jedoch auf den Server hochspiele, funktioniert die Session nur noch dann wenn ich im Browser die
Cookies aktiviert habe. Ansonsten wird stets eine neue Session generiert, wodurch natürlich alle Seesion-Variablen
"verloren" gehen.
Woran kann das liegen? Die Einstellungen auf dem Server sind mit denen hier lokal (alles default Werte der Standartinstallation- bis auf den Pfad für die Session "session.save_path") identisch. Liegt es überhaupt an den Einstellungen auf dem Server?

Vielen Dank im Voraus

Andreas

  1. Hallo!

    echo ("<a href="weiter.php?".session_id()."">weiter</a>");

    Wie übergibst Du den Session-Name? Mit nur der Session-ID kann PHP nichts anfangen.

    Ich vermute mal, Du hast Lokal Windows und auf dem Server läuft ein Unix. Bei einer Installation unter Windows wird in der Regel die Option "trans-sid" mit Installiert. Dies bedeutet, daß bei deaktivierten Cookies alle Links mit dem Session-Name und Session-ID versehen werden. PHP parst die gesamte Seite. Das kostet aber sehr viel Performance, auf einem Server wenn dort ein paar 100 Kunden drauf sind. Deshalb installieren die meisten Provider diese Option nicht mit.
    Damit Du nun die gesamte Seite für den Fall deaktivierter Cookies nicht mit den Variablen versehen mußt, kannst Du die Konstante SID einsetzen, was weniger Schreibarbeit ist und die Daten auch nur wenn nötig geschrieben werden. Bei deaktivierten Cookies wird dann für SID die Sessiondaten in der Form session_name=session_id geschrieben.

    echo "<a href="weiter.php?". SID ."">weiter</a>";

    Woran kann das liegen? Die Einstellungen auf dem Server sind mit denen hier lokal (alles default Werte der Standartinstallation- bis auf den Pfad für die Session "session.save_path") identisch. Liegt es überhaupt an den Einstellungen auf dem Server?

    Klar machen die Einstellungen was aus. Je nach dem, mehr oder weniger relevant. Das temporäre Verzeichnis liegt "etwas anders" unter Unix oder der Administartor hat für die Sessiondateien ein anderes Verzeichnis gewählt.

    MfG, André Laugks

    1. Hallo!

      echo ("<a href="weiter.php?".session_id()."">weiter</a>");

      Ich vermute mal, Du hast Lokal Windows und auf dem Server läuft ein Unix. Bei einer Installation unter Windows wird in der Regel die Option "trans-sid" mit Installiert.

      Ja, stimmt. Ich habe die option "session.use_trans_sid" jetzt auf "0" gesetzt. Dann trat lokal auch der gleiche "Fehler" wie auf dem Server auf.
      Nur seltsamerweise steht in der phpinfo des Servers das "use_trans_sid" auch auf "1" steht. Seltsam das es dann nicht funktioniert hat...

      Damit Du nun die gesamte Seite für den Fall deaktivierter Cookies nicht mit den Variablen versehen mußt, kannst Du die Konstante SID einsetzen, was weniger Schreibarbeit ist und die Daten auch nur wenn nötig geschrieben werden. Bei deaktivierten Cookies wird dann für SID die Sessiondaten in der Form session_name=session_id geschrieben.

      echo "<a href="weiter.php?". SID ."">weiter</a>";

      Ja danke. So funktioniert es (auch mit deaktivierten Cookies).

      Viele Grüße

      Andreas

      1. Hallo!

        Nur seltsamerweise steht in der phpinfo des Servers das "use_trans_sid" auch auf "1" steht. Seltsam das es dann nicht funktioniert hat...

        IMHO hat das nichts zu bedeuten. :-(

        MfG, André Laugks

        1. Hallo!

          IMHO hat das nichts zu bedeuten. :-(

          Ähhhmmm! Ich denke, session.use_trans_sid = 0 setzt, ist aich SID deaktiviert! Probiere einfach mal!

          MfG, André Laugks

          1. Hi!

            IMHO hat das nichts zu bedeuten. :-(

            Ähhhmmm! Ich denke, session.use_trans_sid = 0 setzt, ist aich SID deaktiviert! Probiere einfach mal!

            Ich habe session.use_trans_sid = 0 gesetzt. Das kommt dem Verhalten auf dem Server doch sehr nahe.

            <?php echo (SID); ?> hänge ich jetzt an jeden Link und an jedes Formular dran. Die Session-ID wird nun automatisch angehangen, wenn Cookies deaktiviert sind (und nur dann). SID ist also nur dann deaktiviert wenn Cookies eingeschaltet sind. Was für ein Aufwand für den Webserver extra nachzuschauen, ob der Client denn Cookies kann/aktiviert hat oder deaktiviert hat !?

            So funktioniert es auf jeden Fall einwandfrei.

            Nochmals Danke!

            Andreas

            1. Hallo!

              Ähhhmmm! Ich denke, session.use_trans_sid = 0 setzt, ist aich SID deaktiviert! Probiere einfach mal!

              Ich habe session.use_trans_sid = 0 gesetzt. Das kommt dem Verhalten auf dem Server doch sehr nahe.

              Ok, also funktioniert dann SID. Ich war mir nicht so sicher, ob bei session.use_trans_sid = 0, SID auch deaktiviert ist.

              Was für ein Aufwand für den Webserver extra nachzuschauen, ob der Client denn Cookies kann/aktiviert hat oder deaktiviert hat !?

              Es wird beim Aufruf der Seite geschaut, ob ein Cookie gesetzt werden kann. Das passiert mit session_register() oder session_start();. Deshalb muß das Sessionzeug auch gestartet werden, bevor auch nur ein Zeichen gesendet/ausgegeben wird.

              MfG, André Laugks