Probleme mit SESSION

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

  • Probleme mit SESSION

    Hallo zusammen!

    Habe ein kleines Online-Bestellsystem für Gastro-Lieferdienste programmiert und alles funktioniert soweit auf meinem localhost. Auf dem Webserver von strato funktioniert auch alles soweit bis auf folgendes:

    Die Artikel samt Kundendaten werden in $_SESSION['order'] und $_SESSION['customer'] gespeichert. Klickt der Kunde auf "Bestellen" und wählt als Zahlungsart "sofortüberweisung.de" wird der Kunde mit Übergabe der Variablen auf die Seiten von "sofortüberweisung.de" umgeleitet. Nach erfolgreicher Transaktion gelangt der Kunde wieder auf ../shop.php mit entsprechenden Parameter zur Überprüfung - dann soll eigentlich die Bestellung gesendet werden - ABER die SESSION ist gelöscht!

    Auch durch die folgende Änderungen an der PHP-Konfiguration ändert nichts:

    PHP-Code:
        ini_set("session.use_cookies","1");    
        
    ini_set("session.use_trans_sid","0");
        
    ini_set("session.cookie_lifetime","0");
        
    ini_set("session.use_only_cookies","On");
        
    ini_set("session.gc_probability","1"); 
        
    ini_set("session.gc_divisor","1000");
        
    ini_set("session.gc_maxlifetime",3600);
        
    ini_set("session.name","PHPSESSID");
        
    ini_set("session.auto_start","0"); 
    Was mache ich falsch oder muss ich noch beachten, damit das ganze auch bei Strato funktioniert?

    Über kleine Hilfen würde ich mich riesig freuen!

    MfG

    Marcel

  • #2
    Wie kommst du auf die Idee dass Zahlen durch Anführungszeichen aufgewertet, oder schöner werden?
    Da muss ich dich enttäuschen: Dem ist nicht so!


    Wechselt die Session ID ?
    Vermutlich ja!

    error_reporting() aktiviert?
    Vermutlich nein!
    Tue das.

    Mit der Live Headers Erweiterung des FF kannst du die übergebenen Header analysieren.
    Tue das.
    Wir werden alle sterben

    Kommentar


    • #3
      Hallo,

      startest du die Session auch mit session_start()? Evtl. ist auf deinem lokalen System session.auto_start aktiviert? Bleibt die Session denn erhalten, wenn der Benutzer auf deiner Seite bleibt? Geht sie verloren, wenn du zu einer beliebigen anderen Seite wechselst und dann wieder zurückkehrst? Ist bei Strato ein Wert für session.referer_check gesetzt (phpinfo())? Mehr Infos wären nicht schlecht.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Danke für die Antwort!

        Habe die Anführungszeichen weggelassen und error_reporting hinzugefügt, gibt mir aber kein error aus:
        PHP-Code:
                error_reporting(E_ALL);
                
        ini_set("session.use_cookies",0);    
                
        ini_set("session.use_trans_sid",0);
                
        ini_set("session.cookie_lifetime",0);
                
        ini_set("session.use_only_cookies",0);
                
        ini_set("session.gc_probability",1); 
                
        ini_set("session.gc_divisor",1000);
                
        ini_set("session.gc_maxlifetime",3600);
                
        ini_set("session.name","PHPSESSID");
                
        ini_set("session.auto_start",0); 
        session_start() ist im header. Hier die phpinfo():

        Session Support enabled Registered save handlers files user sqlite Registered serializer handlers php php_binary
        DirectiveLocal ValueMaster Value session.auto_startOffOff session.bug_compat_42OffOff session.bug_compat_warnOnOn session.cache_expire180180 session.cache_limiternocachenocache session.cookie_domainno valueno value session.cookie_httponlyOffOff session.cookie_lifetime00 session.cookie_path// session.cookie_secureOffOff session.entropy_fileno valueno value session.entropy_length00 session.gc_divisor10001000 session.gc_maxlifetime36001440 session.gc_probability11 session.hash_bits_per_character55 session.hash_function00 session.namePHPSESSIDPHPSESSID session.referer_checkno valueno value session.save_handlerfilesfiles session.save_path/tmp2;/var/tmp session.serialize_handlerphpphp session.use_cookiesOnOn session.use_only_cookiesOnOff session.use_trans_sid01
        Demnach ist bei STRATO kein Wert bei session.referer_check angegeben.

        Welche Infos benötigt Ihr zusätzlich?

        Danke!

        hmm
        Zuletzt geändert von AmicaNoctis; 11.08.2010, 15:42.

        Kommentar


        • #5
          Zitat von SnowMan Beitrag anzeigen
          Welche Infos benötigt Ihr zusätzlich?
          Wie wäre es damit?:

          Zitat von AmicaNoctis Beitrag anzeigen
          Bleibt die Session denn erhalten, wenn der Benutzer auf deiner Seite bleibt? Geht sie verloren, wenn du zu einer beliebigen anderen Seite wechselst und dann wieder zurückkehrst?
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Die Session bleibt erhalten laut Live HTTP Headers...

            Kommentar


            • #7
              So soll es beginnen!
              PHP-Code:
              <?php
              error_reporting
              (-1);    
              ini_set('display_errors'TRUE);
              (zumindest während des Debuggens, danach kannst du es wieder abschalten.)


              session_start() ist im header.
              Was soll das bedeuten?
              Warum hältst du den zugehörigen Code geheim?


              Die Session bleibt erhalten laut Live HTTP Headers...
              Dann löscht du selber irgendwo die Daten, oder Strato baut Bockmist, was ich aber nicht glaube.
              Zuletzt geändert von combie; 11.08.2010, 15:48.
              Wir werden alle sterben

              Kommentar


              • #8
                Ich muss mich korrigieren - die Session bleibt nicht erhalten, werde den die Anweisungen von combie kurz einbauen...

                Kommentar


                • #9
                  Zitat von combie Beitrag anzeigen
                  So soll es beginnen!
                  PHP-Code:
                  <?php
                  error_reporting
                  (-1);    
                  ini_set('display_errors'TRUE);
                  (zumindest während des Debuggens, danach kannst du es wieder abschalten.)



                  Was soll das bedeuten?
                  Warum hältst du den zugehörigen Code geheim?



                  Dann löscht du selber irgendwo die Daten, oder Strato baut Bockmist, was ich aber nicht glaube.



                  ----------------------
                  Hier der Code im Header:

                  PHP-Code:
                  <?php
                      
                      
                  //if (! isset($_SESSION)){
                          
                  error_reporting(-1);
                          
                  ini_set('display_errors',TRUE);
                          
                  ini_set("session.use_cookies",0);    
                          
                  ini_set("session.use_trans_sid",0);
                          
                  ini_set("session.cookie_lifetime",0);
                          
                  ini_set("session.use_only_cookies",0);
                          
                  ini_set("session.gc_probability",1); 
                          
                  ini_set("session.gc_divisor",1000);
                          
                  ini_set("session.gc_maxlifetime",3600);
                          
                  ini_set("session.name","PHPSESSID");
                          
                  ini_set("session.auto_start",0);

                          
                  session_save_path('/tmp');
                      
                  //    ini_set("register_globals","On");
                      //    ini_set("session.save_path",\);    
                      //    ini_set("session.cookie_domain","www.milano-express.de");
                          
                  session_start();
                      
                  //}

                      
                  if (! isset($catsel)){
                          
                  $catsel="";
                      }
                  ?>

                  Kommentar


                  • #10
                    Und, was bringts?
                    Machst du auch wirklich in[COLOR="Red"] JEDER[/COLOR] aufgerufenen Datei das gleiche?

                    Lass doch mal die ganze Sessionkonfiguration weg!
                    Die Strato default Einstellungen sind für den Anfang durchaus brauchbar.
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Zitat von combie Beitrag anzeigen
                      So soll es beginnen!
                      PHP-Code:
                      <?php
                      error_reporting
                      (-1);    
                      ini_set('display_errors'TRUE);
                      (zumindest während des Debuggens, danach kannst du es wieder abschalten.)



                      Was soll das bedeuten?
                      Warum hältst du den zugehörigen Code geheim?



                      Dann löscht du selber irgendwo die Daten, oder Strato baut Bockmist, was ich aber nicht glaube.

                      Mir werden keine Fehler angezeigt, SESSION wird geändert, aber erst nach der Umleitung von sofortueberweisung.de nach /shop.php... Hier noch mal der Code im Header:

                      PHP-Code:
                      <?php
                          
                          
                      if (! isset($_SESSION)){
                              
                      error_reporting(-1);
                              
                      ini_set('display_errors',TRUE);
                              
                      ini_set("session.use_cookies",0);    
                              
                      ini_set("session.use_trans_sid",0);
                              
                      ini_set("session.cookie_lifetime",0);
                              
                      ini_set("session.use_only_cookies",0);
                              
                      ini_set("session.gc_probability",1); 
                              
                      ini_set("session.gc_divisor",1000);
                              
                      ini_set("session.gc_maxlifetime",3600);
                              
                      ini_set("session.name","PHPSESSID");
                              
                      ini_set("session.auto_start",0);

                              
                      session_save_path('/tmp');
                          
                      //    ini_set("register_globals","On");
                          //    ini_set("session.save_path",\);    
                          //    ini_set("session.cookie_domain","www.milano-express.de");
                              
                      session_start();
                          }

                          if (! isset(
                      $catsel)){
                              
                      $catsel="";
                          }
                      ?>

                      Kommentar


                      • #12
                        Zitat von combie Beitrag anzeigen
                        Und, was bringts?
                        Machst du auch wirklich in[COLOR=Red] JEDER[/COLOR] aufgerufenen Datei das gleiche?

                        Lass doch mal die ganze Sessionkonfiguration weg!
                        Die Strato default Einstellungen sind für den Anfang durchaus brauchbar.
                        Ok, ich lass mal die Sessionkonfigurationen weg, in jeder Datei habe session_start() im Header. Ich überprüfe aber nochmal zur Sicherheit.
                        Die Sessionkonfig. hatte ich erst eingefügt, nachdem das schon nicht funktionierte - auf localhost funzt es ja...?

                        Kommentar


                        • #13
                          in jeder Datei habe session_start() im Header.
                          Und nochmal: Was ist ein Header?
                          Ich kenne im diesem Zusammenhang nur:
                          1. HTTP Header
                          2. HTML Head
                          Also, welchen meinst du?

                          Und wenn deine Datei nur ein kleiner Teil eines großen Ganzen ist, dann teste doch erstmal mit eigenständigen Dateien in einem eigenständigen Testordner.

                          Ich habe täglich mit bei Strato gehosteten Websites zu tun, und ich kann dir schwören, dass das fehlerfrei funktioniert. (meistens)

                          Hier mal ein kleines (eigenständiges) Testprogramm:

                          PHP-Code:
                          <?php
                          error_reporting
                          (-1);
                          ini_set('display_errors'TRUE);

                          class 
                          Counter
                          {
                            protected 
                          $count=0;
                            public function 
                          __wakeup()
                            {
                              ++
                          $this->count;
                            }
                            public function 
                          get()
                            {
                              return 
                          $this->count
                            }
                            public function  
                          __toString()
                            {
                              return (string)
                          $this->count
                            }
                          }


                          session_start();

                          // Cache verhinderer
                          output_add_rewrite_var('random',mt_rand());

                          if(empty(
                          $_SESSION['Counter']))  $_SESSION['Counter'] = new Counter;



                          echo 
                          "Seitenbesuche:  {$_SESSION['Counter']}";
                          ?>
                          <hr>
                          <a href="">Reload</a>
                          Zuletzt geändert von combie; 11.08.2010, 16:17.
                          Wir werden alle sterben

                          Kommentar


                          • #14
                            Geh auf deine Seite, notiere die Session-ID, geh weiter auf sofortüberweisung, lass dich von dort zurückleiten auf deine Seite, notiere erneut die Session-ID.

                            Ich gehe jede Wette ein, dass die beiden Session-IDs auf deinem Zettel nicht gleich sind. Es wird also nach der Weiterleitung eine neue Session gestartet. Das geschieht i.d.R. aus einem der folgenden Gründe:
                            - Die alte SID wurde übertragen, aber auf dem Server existieren dazu keine Daten mehr (Session abgelaufen, TempFile gelöscht). Dagegen hilft eine längere Session-Laufzeit oder ein persistenter Speicher (DB).
                            - Die alte SID wurde nicht übertragen, der Server muss eine neue Session starten. Prüfe, ob das Session-Cookie in deinem Browser den Ausflug zu sofortüberweisung überlebt, setze ggf. die Gültigkeitsdauer hoch. Überlebt das Cookie, finde heraus warum dein Browser es nicht wieder mitschickt beim nächsten Request an deine Seite. Gilt das Cookie bspw. für Example Web Page und die Weiterleitung führt zu example.net ohne www?

                            Kommentar


                            • #15
                              Zitat von onemorenerd Beitrag anzeigen
                              Geh auf deine Seite, notiere die Session-ID, geh weiter auf sofortüberweisung, lass dich von dort zurückleiten auf deine Seite, notiere erneut die Session-ID.

                              Ich gehe jede Wette ein, dass die beiden Session-IDs auf deinem Zettel nicht gleich sind. Es wird also nach der Weiterleitung eine neue Session gestartet. Das geschieht i.d.R. aus einem der folgenden Gründe:
                              - Die alte SID wurde übertragen, aber auf dem Server existieren dazu keine Daten mehr (Session abgelaufen, TempFile gelöscht). Dagegen hilft eine längere Session-Laufzeit oder ein persistenter Speicher (DB).
                              - Die alte SID wurde nicht übertragen, der Server muss eine neue Session starten. Prüfe, ob das Session-Cookie in deinem Browser den Ausflug zu sofortüberweisung überlebt, setze ggf. die Gültigkeitsdauer hoch. Überlebt das Cookie, finde heraus warum dein Browser es nicht wieder mitschickt beim nächsten Request an deine Seite. Gilt das Cookie bspw. für Example Web Page und die Weiterleitung führt zu example.net ohne www?

                              Die SESSION ist in der Tat dann nach Weiterleitung nicht mehr die gleiche.
                              Wenn ich manuell auf sofortüberweisung wechsle und ohne Transaktion wieder zurückkehre, ist die SESSION identisch. Es muss wohl mit der erfolgreichen Transaktion mit sofortüberweisung zu tun haben, denn bei Erfolg leitet sü auf den eingetragenen "Erfolgslink" um und dann wird eine neue SESSION generiert. Muss ich da noch irgendwas im Erfolgslink angeben, damit er keine neue Session generiert?

                              Kommentar

                              Lädt...
                              X