$_SESSION-Daten werden "vergessen"

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

  • $_SESSION-Daten werden "vergessen"

    Moin,

    ich hab "mal wieder" ein kleines Problem bei meinem Script.

    wenn ich aus der Datenbank einen datensatz suche, wird der gefundene in einigen Feldern von $_SESSION gespeichert, damit er beim nächsten Schritt des Scriptes zur Verfügung steht.

    Das klappt auch von der Such-Funktion zur Eingabe-Funktion. Wenn ich aber ein anderes Formular aufrufe sind die Datenfelder der Session auf einmal leer, bis auf den angemeldeten User und dessen Session_id ...

    PHP-Code:
     if ($_POST['kontraktliste']) {    // welche Kunden-ID wurde gewählt
        
    $datensatz_id=$_POST['kontraktliste'];
        
    $sql="SELECT * FROM customers WHERE id='".$datensatz_id."' ";
       
    $db=new db1();                // diesen Kunden aus der Datenbank holen
         
    $datensatz=$db->db_sql($sql);
        if (
    $db->anz==1) {            // das kann eigentlich nur ein Kunde sein
    .....
        
    $_SESSION['contract']=$datensatz[0]['kontrakt_nr'];
        
    $_SESSION['position']=$datensatz[0]['position_nr'];
       }
       else {
           
    $fehler=1
       }
    }
    if (
    $fehler===0) {
         
    $menuauswahl=10//    Keine Fehler vorher festgestellt Anzeige als Bestandskunde (also alt)
         
    $new="old";
     } 
    wenn ich mir an dieser Stelle die Session-Daten ausgeben lasse steht da irgendwas in der Form
    IDuser: 3
    sid : e3xxxxxxxxxxxxxxxxxxxxxxxxxxxxf7
    contract: <eine gülte Vertragsnummer>
    position: <eine Position aus diesem Vertrag>
    drin.

    Anschließend wird automatisch dieser Vertrag im Formular für die Kundenstammdaten angezeigt falls Änderungen gemacht werden sollen, ansonsten ist das als Anzeige auch sehr übersichtlich ...

    Wenn ich danach aber auf einen Menüpunkt klicke, der mir weitere Vertragsbestandteile auflisten soll, verzweige ich in eine andere Funktion
    und hole mir die Daten ausgehend von den Session-Daten in contract und position .. nur steht dort eigenartigerweise nix drin . ich bin mir aber ziemlich sicher, nirgends die Session-Daten zu löschen

    PHP-Code:
    switch ($menuauswahl) { // welches Formular
       
    case :    // neuen Kunden suchen 
          
    echo $this->form_suchekunde($ret); 
          break;
      case 
    :    // Kunden-Formular "vorbereiten" = neuer Kunde
          
    $new="new";
          
    $_SESSION[contract]="";
          
    $_SESSION[position]="";
      case 
    10:    // hier das Kunden-Formular anzeigen .. alt / neu 
          
    echo $this->form_kundestamm($new,$ret);
          break;
      case 
    :    // Formular mit Kennung anzeigen 
         
    echo $this->form_kenndaten($ret);
         break;
    ... 
    also nach der Suche ist es bei case 10 - der wird ja automatisch aufgerufen - und zeigt auch korrekt den ausgewählten Vertrag an. Nur bei case 2 sind die Session-Daten auf einmal leer
    Und ehrlich gesagt fehlt mir mitlerweile die Fantasie, wo es noch dran liegen kann

    Achso - grundsätzlich läuft dieser Teil des scriptes als Object und wird in der index.php folgendermaßen eingebaut
    PHP-Code:
    <?php
    session_start
    ();
    require(
    'include/class_db.php');
    require(
    'include/class_zugriff.php');
    require(
    'include/class_hauptform.php');
    $handle0=fopen('output/sess_report.txt','a');
    foreach(
    $_SESSION as $key=>$element) { 
        
    fwrite($handle0,"\n".$key." - ".$element."\n");
    }
    $work=new hauptformular();
    ?>
    die foreach schleife ist nur zum Reporting drin während der Entwicklung - auch dort fehlen auf einmal die betreffenden Session Daten. Die obigen Code-Ausschnitte stammen beide aus der class_hauptform.php
    Komischerweise wird IDuser und sid aber nicht gelöscht .....
    also ich bin ratlos
    Zuletzt geändert von eagle275; 12.07.2010, 08:15.
    [font=Verdana]
    Wer LESEN kann, ist klar im Vorteil!
    [/font]

  • #2
    seesoin_start()

    Ich versuchs mal im ersten Versuch Blindflug ohne deinen Post ganz durchgelesen zu haeben:

    session_start() wird gerne vergessen

    EDIT: Sorry, wie gesagt, Blindflug. Das kanns also nicht sein.

    Fehlt dir bei case 9 absichtlich das break?
    Zuletzt geändert von ThemBones; 12.07.2010, 08:20.

    Kommentar


    • #3
      ja, das fehlt absichtlich , wenn der Nutzer auf "Neuer Kunde" klickt, werden die Session Daten gelöscht (hinsichtlich Contract und Position) und das gleiche Formular zu den Kundenstammdaten aufgerufen - nur ist es jetzt halt leer.
      [font=Verdana]
      Wer LESEN kann, ist klar im Vorteil!
      [/font]

      Kommentar


      • #4
        Hm

        Ist jetzt schwer zu sagen, könnte alles mögliche sein. In solchen Fällen wäre es optimal,
        einen debugger zur Hand zu haben. Hast die Möglichkeit dazu?

        Funktioniert wunderbar mit xdebug am Server und bspw. netbeans als IDE (ist kostenlos).
        Xdebug verträgt sich allerdings nicht mit Zend Optimizer.

        Dann könntest in Einzelschritten die Anwendung durchgehen und dir genau ansehen wo die Daten "verschwinden".

        Kommentar


        • #5
          uh . hab ich nicht "zur Hand" .. ich schreib auf ner Linux-Maschine mit Notepad++ .. und bisher hat der echo-Debugger ausgereicht ...

          HAB DEN FEHLER !

          warum rennt PHP auch durch die kunden-such Funktion unsichtbar durch , obwohl die Bedingung dafür gar nicht vorliegt .. dort standen 3 unsets für $_SESSION[wert] drin, die eben Contract und Position gelöscht haben - ohne die 3 unsets bleiben die Daten erhalten
          Zuletzt geändert von eagle275; 12.07.2010, 08:55.
          [font=Verdana]
          Wer LESEN kann, ist klar im Vorteil!
          [/font]

          Kommentar


          • #6
            Vermutlich wird case 9 ausgeführt.

            Kommentar


            • #7
              Hallo,

              Zitat von eagle275 Beitrag anzeigen
              ich schreib auf ner Linux-Maschine mit Notepad++
              dann öffne mal alle PHP-Dateien die zu dem Projekt gehören im Notepad++, öffne das Suchfenster und such nach „$_SESSION“ mit dem Button „Suche in allen offenen Dateien“. Dann kopierst du das gesamte Suchergebnisfenster mal hier rein.

              Edit: achso, schon erledigt

              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


              • #8
                und irgendwie doch nicht erledigt ..

                daher hier mal das was Amica vorgeschlagen hat

                Code:
                    Line 245:                         $_SESSION[contract]="";
                    Line 246:                         $_SESSION[bosinet]="";
                    Line 247:                         $_SESSION[position]="";
                    Line 352:                 $_SESSION[contract]="";
                    Line 353:                 $_SESSION[bosinet]="";
                    Line 354:                 $_SESSION[position]="";
                    Line 414:             $_SESSION[sit]="";
                    Line 415:             $_SESSION[IDuser]="";
                    Line 416:             $_SESSION[contract]="";
                    Line 417:             $_SESSION[bosinet]="";
                    Line 418:             $_SESSION[position]="";
                    Line 422:             $_SESSION[contract]="";
                    Line 423:             $_SESSION[bosinet]="";
                    Line 424:             $_SESSION[position]="";
                macht insgesamt 3 Vorkommen der fraglichen $_SESSION[wert]="";

                1tes Vorkommen -> ( Line 245-247) case 9 - da ich mir direkt vor dem switch den inhalt der menuauswahl anzeigen lasse .. da wird kein case 9 durchlaufen, außer ich klicke auf den betreffenden Menü-Punkt

                2tes Vorkommen -> ( Line 352-354) nach dem Login, damit der User nicht in den Kontrakt eines anderen Users gucken kann

                3tes Vorkommen -> ( Line 414-424) Logout - gesamte Daten der Session löschen


                Weitere Vorschläge ?
                Zuletzt geändert von eagle275; 12.07.2010, 12:46.
                [font=Verdana]
                Wer LESEN kann, ist klar im Vorteil!
                [/font]

                Kommentar


                • #9
                  Einfach mal direkt nach jedem Vorkommen (1-3) ein "echo __LINE__;" einfügen!

                  Kommentar


                  • #10
                    danke, das hilft mir erstmal weiter - auch wenn es einen weiteren Fehler aufwirft - der User soll nach einem Time-Out automatisch ausgeloggt werden (ohne Aktion) - und aus diesem Abschnitt stammen die Befehle, die meine Kontrakt-Daten löschen - ABER eigentlich sollte danach entsprechend ein neues Login-nötig werden

                    mal bissel Basteln,

                    danke euch
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      Wärst du so freundlich, und würdest deinen Quelltext ein wenig umbrechen, ich muss schon scrollen. Und wenn du schon dabei bist, könntest du deine Signatur vielleicht auch etwas stauchen
                      [FONT="Helvetica"]twitter.com/unset[/FONT]

                      Shitstorm Podcast – Wöchentliches Auskotzen

                      Kommentar


                      • #12
                        PHP-Code:
                          $_SESSION[sit]=session_id(); 
                        1. was soll der Unsinn?
                        2. Nicht numerische Keys gehören in Anführungszeichen. Aktiviere mal das error_reporting()
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          1) UNSINN ? ich speichere die session_id in einem Feld der Session - damit ich "merke" dass da ein User angemeldet ist - ...
                          2) es funktioniert - noch Fragen?
                          [font=Verdana]
                          Wer LESEN kann, ist klar im Vorteil!
                          [/font]

                          Kommentar


                          • #14
                            Zu 1:
                            Speichere die UserID in Session. Die SID da zu speichern ist völlig sinnfrei. Wird auch in keinem wenigstens halbwegs guten Buch, Beispiel oder Tutorial so abgehandelt.

                            Zu2:
                            Schlampig.
                            Wir werden alle sterben

                            Kommentar


                            • #15
                              1) mach ich doch , wird beides drin gespeichert

                              2) hab es ein wenig angepasst - aber bis auf ein paar Notice - Meldungen, dass er automatisch aus sit 'sit' gemacht hat, seh ich da kein großes Problem.
                              Wobei ich für beides auf meine Buchquelle verweisen "muss". Die netten Autoren von Markt & Technik springen recht munter zwischen $_SESSION[xyz] und $_SESSION['xyz'] hin und her ... und solang man nicht beide Werte irgendwie belegt, gibts ja auch keine Probleme - auch wenn das zugegebenermaßen unsauber ist ..
                              [font=Verdana]
                              Wer LESEN kann, ist klar im Vorteil!
                              [/font]

                              Kommentar

                              Lädt...
                              X