xearon: Session geht bei Seitenwechsel verloren

Hallo,
ich habe ein Problem mit einer Session.
Ich habe zwei webs auf einem Server laufen. eins ist "normal" das andere SSL auf dem "normalen" web ist ein Online-Shop wo man Sachen in einen Warenkorb legt. Artikel werden in einer Datenbank abgelegt unter der Session-Id. wenn man zur Kasse geht springt man in einem Popup-Fenster auf das SSL-Web Weil ja sensible Daten evtl. verschlüsselt werden sollten... :o) Es wird die Session-ID mit Übergeben, das auf die Artikel im Warenkorb zugegriffen werden kann.
war auch kein Problem, bis von PHP 4.3.6 auf 4.3.10 geupdatet wurde.
Seit dem Update wird auf einmal die Session-ID trotz Übergabe neu vergeben und der Warenkorb ist logischer(oder ärgerlicher) Weise leer.
php.ini Einstellungen sind die selben wie vorher.
Hat vieleicht jemand eine Idee??
Vielen Dank

  1. echo $begrüßung;

    Ich habe zwei webs auf einem Server laufen. eins ist "normal" das andere SSL ... springt man ... auf das SSL-Web ... wird die Session-ID mit Übergeben

    Wie geschieht das Übergeben und wie sieht die Initialisierung der Session im übernehmenden Script aus?

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      Ich habe zwei webs auf einem Server laufen. eins ist "normal" das andere SSL ... springt man ... auf das SSL-Web ... wird die Session-ID mit Übergeben

      Wie geschieht das Übergeben und wie sieht die Initialisierung der Session im übernehmenden Script aus?

      echo "$verabschiedung $name";

      Hallo,
      so ist der Link zur Kasse:

      https://ssl.domain.de/bestell1.php?<?=session_name() .'=' . session_id();?>

      Und so die Übername auf dem SSL-Web:

      <?
      @session_start();
      if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}
      ....
      ?>

      1. echo $begrüßung;

        so ist der Link zur Kasse:

        https://ssl.domain.de/bestell1.php?<?=session_name() .'=' . session_id();?>

        Und so die Übername auf dem SSL-Web:

        Was gibt session_name() aus? Unter der Annahme, dass der Standardwert nicht geändert wurde, wäre es zwar möglich einmal die Funktion session_name() zu verwenden, und ein anderes Mal einen String, aber schön ist solch ein Wechsel nicht. Ich plädiere dafür, konsequent nur eins von beiden zu verwenden.

        @session_start();
        if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}

        Da der Keks beim Wechsel der Domain nicht übernommen werden kann, sehe ich eine Übergabe als GET-Parameter auch als sinnvoll an. POST wäre eventuell eine noch eine Alternative.

        Um der Ursache auf den Grund zu gehen, wäre es hilfreich, die Session-IDs zu vergleichen. Die übergebene ID siehst du ja im Link. Gibt session_id() die selbe aus, wenn es nach dem session_start() abgefragt wird?

        Hast du mal alle Fehlermeldungen eingeschaltet? error_reporting auf E_ALL eingestellt?
        Nimm mal das @ von session_start() weg. Vielleicht gibt PHP noch einen Hinweis.

        echo "$verabschiedung $name";

        1. Was gibt session_name() aus? Unter der Annahme, dass der Standardwert nicht geändert wurde, wäre es zwar möglich einmal die Funktion session_name() zu verwenden, und ein anderes Mal einen String, aber schön ist solch ein Wechsel nicht. Ich plädiere dafür, konsequent nur eins von beiden zu verwenden.

          »»
          session_name() gibt PHPSESSID aus.

          Um der Ursache auf den Grund zu gehen, wäre es hilfreich, die Session-IDs zu vergleichen. Die übergebene ID siehst du ja im Link. Gibt session_id() die selbe aus, wenn es nach dem session_start() abgefragt wird?

          »»
          Nein, Sie wird neu vergeben

          Hast du mal alle Fehlermeldungen eingeschaltet? error_reporting auf E_ALL eingestellt?
          Nimm mal das @ von session_start() weg. Vielleicht gibt PHP noch einen Hinweis.

          error_reporting ist auf E_ALL @ weggenommen keine Fehlermeldungen oder Warnungen...

          ...ratlos...

          1. echo $begrüßung;

            Um der Ursache auf den Grund zu gehen, wäre es hilfreich, die Session-IDs zu vergleichen. Die übergebene ID siehst du ja im Link. Gibt session_id() die selbe aus, wenn es nach dem session_start() abgefragt wird?

            Nein, Sie wird neu vergeben

            Warum das so ist weiß ich momentan nicht. Um das Verhalten nachzustellen wäre es hilfreich, wenn du mal zeigst, was phpinfo() im Abschnitt zu den Sessions anzeigt.

            Ich nehme aber an, dass es schon reicht, wenn du explizit session_id() mit dem Wert aus dem $_GET initialisierst, bevor du start_sesion() aufrufst.

            echo "$verabschiedung $name";

            1. Ich nehme aber an, dass es schon reicht, wenn du explizit session_id() mit dem Wert aus dem $_GET initialisierst, bevor du start_sesion() aufrufst.

              Nein, es sind immer noch zwei verschiedene session-ids

              Session Support  enabled
              Registered save handlers  files user

              Directive Local Value Master Value
              session.auto_start Off Off
              session.bug_compat_42 On On
              session.bug_compat_warn On On
              session.cache_expire 45 45
              session.cache_limiter nocache nocache
              session.cookie_domain no value no value
              session.cookie_lifetime 0 0
              session.cookie_path / /
              session.cookie_secure Off Off
              session.entropy_file no value no value
              session.entropy_length 0 0
              session.gc_divisor 100 100
              session.gc_maxlifetime 2400 2400
              session.gc_probability 1 1
              session.name PHPSESSID PHPSESSID
              session.referer_check no value no value
              session.save_handler files files
              session.save_path /tmp /tmp
              session.serialize_handler php php
              session.use_cookies On On
              session.use_only_cookies Off Off
              session.use_trans_sid Off Off

              1. Hello,

                Ich nehme aber an, dass es schon reicht, wenn du explizit session_id() mit dem Wert aus dem $_GET initialisierst, bevor du start_sesion() aufrufst.

                Das wäre dann Session "zu Fuß".

                session.use_only_cookies Off Off
                session.use_trans_sid Off Off

                Du hast den URL-based Session Support ausgeschaltet. Wenn mich nicht alles täuscht, funktioniert das rein wie raus nur, wenn session.use_trans_sid on ist.

                An Deiner Stelle würde ich die Sessionnummer in einem Postparamter übergeben (Hidden-Feld)
                Das hat den Vortel, dass der Normaluser sie nicht sieht und die normalen Logs von Webservern und Hobs sie nicht speichern. Und dann kannst Du auch die Methode von Dedlfix verwenden, mit der Du die Session mit einer vorbelegten ID startest.

                Dann musst DU aber den Cookie vor dem Start auch selber setzen. Zumindest war das in den älteren PHP-Versionen so. Der Cookie wurde nämlich nur gesetzt beim Session-Start, wenn keine Session-Nummer empfangen wurde (wenn session.use_trans_sid == Off).

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

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. session.use_only_cookies Off Off
                  session.use_trans_sid Off Off

                  Du hast den URL-based Session Support ausgeschaltet. Wenn mich nicht alles täuscht, funktioniert das rein wie raus nur, wenn session.use_trans_sid on ist.

                  Wenn ich session_use_trans_sid auf on stelle dann hängt PHP die Session ID doch an jeden Link mit an. Oder nicht?
                  Das wollte ich eben vermeiden.
                  Das Problem besteht komischerweise nur, wenn ich vom normalen auf das SSL Web springe. auf der ersten Seite im SSL wird ja die Session-ID übernommen, was sich aber ändert, sobald ich auf die nächste Seite komme. Da wird dann eine neue Session-ID vergeben.
                  Stellt sich die Frage, warum das so ist. Und vorallem warum erst seit PHP-Version 6.3.10 was ja eigentlich "nur" ein BUG-Release ist...
                  Jetzt muss ich im SSL-Bereich immer die Session "zu Fuß" übergeben.
                  Aber kann das der Sinn der Sache sein??
                  G
                  Olli

                  1. Hello,

                    Stellt sich die Frage, warum das so ist. Und vorallem warum erst seit PHP-Version 6.3.10 was ja eigentlich "nur" ein BUG-Release ist...

                    Uii, da habe ich wohl ein bisschen lange geschlafen. Die letzte Version, die ich ausprobiert habe, ist die 5c3

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

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. Uii, da habe ich wohl ein bisschen lange geschlafen. Die letzte Version, die ich ausprobiert habe, ist die 5c3

                      Ups, hab ich wohl die Wuchstaben Verbechselt :o)

      2. Hello,

        da wäre jetzt mal ein Blick in die php.ini sinnvoll bzw in phpinfo().
        Vermutlich ist da eine Änderung eingetreten --> session.use_only_cookies = on ?

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

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Vermutlich ist da eine Änderung eingetreten --> session.use_only_cookies = on ?

          session.use_onlycookies war vorher wie danach auf off...

  2. Hallo,

    bis von PHP 4.3.6 auf 4.3.10 geupdatet wurde.

    eh boah eh, dieses Deutsch... Richtig muß es natürlich "upgedatet" heißen ;-)

    @session_start();

    ja, wenn Du die Fehlerausgaben unterdrückst, kannst Du natürlich auch keine Fehler gemeldet bekommen. Das ist so, wie wenn Du mit dem Auto auf der Autobahn bist, und weil die Tankanzeige Leerstand anzeigt, schlägst Du das Lämpchen kaputt, um noch 500 Km fahren zu können...

    if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}

    hast Du Dir denn $_GET["PHPSESSID"] überhaupt mal ausgeben lassen? Heißt die Session denn noch "PHPSESSID"?

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch
    1. ja, wenn Du die Fehlerausgaben unterdrückst, kannst Du natürlich auch keine Fehler gemeldet bekommen. Das ist so, wie wenn Du mit dem Auto auf der Autobahn bist, und weil die Tankanzeige Leerstand anzeigt, schlägst Du das Lämpchen kaputt, um noch 500 Km fahren zu können...

      Kommt auch ohne @ kein Fehler

      if($_GET["PHPSESSID"]!=""){$_COOKIE["PHPSESSID"]=$_GET["PHPSESSID"];}

      hast Du Dir denn $_GET["PHPSESSID"] überhaupt mal ausgeben lassen? Heißt die Session denn noch "PHPSESSID"?

      Ja, sie heisst noch PHPSESSID

      1. hast Du Dir denn $_GET["PHPSESSID"] überhaupt mal ausgeben lassen? Heißt die Session denn noch "PHPSESSID"?
        Ja, sie heisst noch PHPSESSID

        und...? was hat sie für einen Wert?

        Gruß, Andreas

        --
        SELFFORUM - hier werden Sie geholfen,
        auch in Fragen zu richtiges Deutsch
        1. und...? was hat sie für einen Wert?

          halt eine normale Session-ID:

          247731cad222e042cd2f3c645a18f455

  3. Hallo Leute,

    da muss ich mich ja grad mal mit einmischen.
    Ich hab ein ähnliches Problem, allerdings Browser abhängig!
    < http://forum.de.selfhtml.org/archiv/2005/5/t107710/>

    Bei mir werden meistens AOL Nutzer aus meinen Sessions rausgekickt. Warum? Keine Ahnung! Die Links (mit SESS_ID) passen alle (bei anderen Browser funktioniert es ja auch!).

    Grüße in die weiten des Weballs!