Ankündigung

Einklappen
Keine Ankündigung bisher.

Session-Konzept gestört nach PHP5-Upgrade

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Session-Konzept gestört nach PHP5-Upgrade

    Hallo,

    Ich habe unseren Webshop, der auf PHPShop 0.6.1 basiert, auf einen neuen Webserver ziehen müssen, der jetzt PHP5-Standart hat. Seitdem habe ich ernsthafte Schwierigkeiten mit dem Warenkorb, der in $_SESSION zwischengespeichert wird. Auf der Seite, auf welcher der Artikel zum Warenkorb hinzugefügt wird, ist die globale Variable $cart bzw. $_SESSION["cart"] laut debug-Ausgabe korrekt befüllt.

    Wenn ich die nächste Seite öffne und im Verlauf die Session-Daten wieder in u.a. die globale Variable $cart übertragen werden sollen, geht was schief. Ich habe nach session_start() eine identische Session ID, also das zumindest funktioniert. die Übertragung geschieht momentan so:

    Code:
        foreach($_SESSION as $key=>$val) {
            $GLOBALS[$key] = $val;
        }
    bzw ursprünglich

    Code:
        foreach($_SESSION as $key=>$val) {
            global $$key;
            $$key = $val;
        }
    Später nach der Session-Initialisierung wird u.a. der Warenkorb überprüft:

    Code:
    // Register the cart
    if (!isset($cart)) {
        echo "Cart initialisieren...";
        $cart = array();
        $cart["idx"] = 0;
        $sess->register("cart");
    }
    Die echo-Zeile wird jedesmal angezeigt, was darauf hinweist, daß entweder die Variable aus der session nicht korrekt globalisiert wurde oder das $_SESSION nach dem Abschluß des vorigen Aufrufs nicht ordentlich gesichert wurde. Aber hier verlassen mich meine PHP-Künste, wo muß ich jetzt ansetzen?

    Ciao!
    SF

  • #2
    Ich würde mir zum debuggen mal den Inhalt von $_SESSION per var_dump() oder print_r() auf jeder Seite ausgeben lassen.

    Warum willst du überhaupt alle $_SESSION-Inhalte in extra variablen übertragen? Und wie sieht die Klasse/Methode $sess->register() aus?
    [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

    Kommentar


    • #3
      PHP-Code:
        // Public
        // Reference a global variable into the session
        
      function register($var_name) {
            global $
      $var_name;
            
      $_SESSION[$var_name] = $$var_name;
        } 
      ein print_r() auf $_SESSION direkt nach session_start() ergibt ein leeres array. ein print_r() nach der Seitenausführung ergibt ein ordentlich gefülltes array. Das Problem liegt also zwischen zwei Aufrufen.

      ciao!
      SF

      Kommentar


      • #4
        Guten morgen,

        Ich hab leider immer noch nicht herausfinden können, warum der Session-Inhalt zwischen zwei (nicht weit auseinander liegenden) Aufrufen verloren geht. Hat das irgendwer schon mal erlebt?


        Ciao!
        SF

        Kommentar


        • #5
          So fällt mir da jetzt nichs ein. Ich würde an deiner stelle jetzt eben erstmal verschiedene dinge testen: Wenn du nicht dein $sess->register() verwendest sondern testweise einfach irgendwas ganz normal per $_SESSION['this_is_a_test'] = 'yes'; einträgst - ist das noch da?
          Tritt das bei allen "Seitenwechseln" auf oder nur bei bestimmten Seiten? Was sagt ein print_r() ganz am Anfang (direkt nach session_start()) was sagt ein print_r() ganz am Ende des Scriptes. Ist es evtl. ein register_globals Problem?

          So aus der ferne fällt mir sonst leider nichts ein.
          [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

          Kommentar


          • #6
            Hi,

            Mich würde interessieren, warum die Daten der Session umgewurstet werden auf diese GLOBALS Sache? Sieht schonmal stark nach schlechtem Codedesign aus und das da Probleme dann auftreten ist nicht verwunderlich.

            Gruß Thomas

            Kommentar


            • #7
              Hallo,

              das mit dem Umwursten kommt vermutlich aus der früheren Geschichte - das ganze läuft schon seit PHP3... Ist auch nicht mein Code, stammt von phpShop. Im shop wird der cart(Einkaufswagen) global angesprochen, und zwischen den Anfragen halt in die Session gepackt.

              Ich hab jetzt aber einen Hinweis im PHP Manual gefunden: Wenn globale Variablen mit ihrem Bezeichner als key in die $_SESSION geschrieben werden, werden sie nach der Anfrage wohl gelöscht... Ich teste das mal aus und sag Bescheid.

              ciao!
              SF

              Kommentar


              • #8
                Setze mal zum Testen
                PHP-Code:
                error_reporting(E_ALL);
                ini_set('display_errors'1);
                ini_set('session.bug_compat_warn'1); 
                an den Anfang des Skripts. (Nicht vegessen, das nachher wieder zu entfernen.)
                Wenn es sich um das von Dir beschriebene Problem handelt, solltest Du eine Warnmeldung "blabla compat42 blabla" bekommen.

                Kommentar


                • #9
                  Ich habe das Problem wohl in den Griff bekommen, aber fragt mich bloß nicht wie. Am Ende des Vorgangs gab es eine Stelle, an der alle Session-Variablen nochmal mit ihren aktuellen global-Varianten überschrieben wurden - die hab ich auskommentiert. Dann war es gut. Keine Ahnung was da das Problem war.


                  ciao!
                  SF

                  Kommentar

                  Lädt...
                  X